【问题标题】:Instantiating DynamoDBQueryExpression with generic classtypes使用通用类类型实例化 DynamoDBQueryExpression
【发布时间】:2016-11-27 17:26:57
【问题描述】:

编辑:我试图稍微简化我手头的问题,但结果却造成了更多的混乱。这是真正的交易:

我正在使用适用于 DynamoDB 的 AWS 的 Java 开发工具包。使用 DynamoDBMapper 类,我试图查询 DynamoDB 以从特定表中检索项目。我有几个映射到我的 DynamoDB 表的对象,我希望有一个通用方法可以接受映射的对象、查询表并返回项目结果。

伪代码:

@DynamoDBTable(tableName="testTable")
public class DBObject {

    private String hashKey;
    private String attribute1;

    @DynamoDBHashKey(attributeName="hashKey")
    public String getHashKey() { return this.hashKey; }
    public void setHashKey(String hashKey)

    @DynamoDBAttribute(attributeName="attribute1")
    public String getAttribute1() { return this.attribute1; }
    public void setAttribute1(String attribute1) { this.attribute1 = attribute1; }
}

public class DatabaseRetrieval {

    public DatabaseRetrieval()
    {
        DBObject dbObject = new DBObject();
        dbObject.setHashKey = "12345";

        DBRetrievalAgent agent = new DBRetrievalAgent;
        dbObject = agent.retrieveDBObject(dbObject.getClass(), dbObject);
    }
}

public class DBRetrievalAgent {

    public Object retrieveDBObject(Class<?> classType, Object dbObject)
    {
        DynamoDBQueryExpression<classType> temp = new DynamoDBQueryExpression<classType>().withHashKeyValues(dbObject);

        return this.dynamoDBMapper.query(classType, temp);
    }
}

【问题讨论】:

  • 您打算对该列表和该类做什么。仅给定一个类,您将如何填充它?课程提供什么信息?你可以使用new ArrayList&lt;Object&gt;
  • 不要在cmets中解释。改为编辑您的问题。

标签: java class generics amazon-dynamodb


【解决方案1】:

在你的方法中使用类型见证:

public <T> String getResult(Class<T> type) {
    List<T> newList = new ArrayList<>();
    //other code
}

【讨论】:

    【解决方案2】:

    试试这个

    ArrayList<T> newList = new ArrayList<>();
    

    【讨论】:

    • 你能解释一下为什么他们应该“试试这个”吗?
    【解决方案3】:

    您可以为您的 getResult() 指定类型为 T 以使其通用(即接受任何类),如下所示:

    public <T> String getResult(T t) {
            String result = "";
            List<T> newList = new ArrayList<>();
    
            // perform actions
    
            return result; 
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2016-08-12
      • 1970-01-01
      • 2021-02-16
      相关资源
      最近更新 更多