2016-11-27 222 views
0

编辑:我试图简化手头上的问题,但事实证明,它造成了更多的混淆。这里是真正的交易:使用泛型类型实例化DynamoDBQueryExpression

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

Psudo代码:

@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); 
    } 
} 
+4

您打算如何处理该列表以及该类别。如果只给予一个Class,你将如何填充它?班级提供什么信息?你可以使用'new ArrayList '。 –

+0

不要在评论中解释它。改为编辑你的问题。 –

回答

0

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

public <T> String getResult(T t) { 
     String result = ""; 
     List<T> newList = new ArrayList<>(); 

     // perform actions 

     return result; 
    } 
0

尝试此

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

你能解释他们为什么要“试试这个”吗? – Tunaki

1

使用在您的方法中输入目击者:

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