我正在使用包含方法的外部库:
public <V> List<V> getObjectsForHashCriteria(@NonNull final Class<V> clazz, @NonNull final V hashObject) {
final DynamoDBQueryExpression<V> queryExpression = new DynamoDBQueryExpression<V>().withHashKeyValues(hashObject);
return dynamoDBMapper.query(clazz, queryExpression,
dynamoDBMapperConfig);
}
我想调用上面的方法。为了获取类对象,我在构造函数中传递它。像这样:
MyClass(final @NonNull Class<T> clazz){
this.clazz = clazz}
为了调用getObjectsForHashCriteria(),我现在正在执行它,如下所示,但它显示了编译错误:
public <T> List<T> fetchObjectsForHashCriteria(@NonNull final T hashObject){
instance.getObjectsForHashCriteria(clazz, hashObject);
}
但是它显示了编译错误:
方法getObjectsForHashCriteria(Class,V)不适用 参数(Class,T)。
所以基本上我试图将泛型类型参数作为泛型类型参数传递。请告诉我这是什么问题?如果无法做到这一点,是否有解决方法?
答案 0 :(得分:3)
您没有展示完整的课程MyClass
,但我认为它看起来像这样:
public class MyClass<T> {
private final Class<T> clazz;
// ...
MyClass(final @NonNull Class<T> clazz) {
this.clazz = clazz;
}
public <T> List<T> fetchObjectsForHashCriteria(@NonNull final T hashObject) {
instance.getObjectsForHashCriteria(clazz, hashObject);
}
}
这有什么问题:方法fetchObjectsForHashCriteria
有自己的类型参数T
,它与类T
的类型参数MyClass
是分开的,即使它们都发生了被命名为T
。
删除方法上的类型参数T
;让它使用类中的T
代替:
// Note: no <T> type parameter
public List<T> fetchObjectsForHashCriteria(@NonNull final T hashObject) {
instance.getObjectsForHashCriteria(clazz, hashObject);
}