繁体   English   中英

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

[英]Generics - The method in the type is not applicable for the arguments

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

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

所以基本上我试图将通用类型参数作为通用类型参数传递。 请让我知道这是什么问题? 如果这不可能,是否有任何解决方法?

您没有显示完整的类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 ,该类型参数与类MyClass的类型参数T分开,即使它们都恰好都被命名为T

删除方法上的类型参数T 让它使用类中的T代替:

// Note: no <T> type parameter
public List<T> fetchObjectsForHashCriteria(@NonNull final T hashObject) {
    instance.getObjectsForHashCriteria(clazz, hashObject);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM