[英]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.