泛型 - 类型中的方法不适用于参数

时间:2016-12-16 14:36:41

标签: java generics

我正在使用包含方法的外部库:

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)。

所以基本上我试图将泛型类型参数作为泛型类型参数传递。请告诉我这是什么问题?如果无法做到这一点,是否有解决方法?

1 个答案:

答案 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);
}