我有以下课程
KeyValue.java
package test;
public class KeyValue<T> {
private String key;
private T value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
Reader.java
package test;
public interface Reader<T> {
<S extends T> S read(Class<S> clazz);
}
Run Code Online (Sandbox Code Playgroud)
Test.java
package test;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<KeyValue<Object>> list = find(KeyValue.class, new Reader<KeyValue<Object>>() {
@Override
public <S extends KeyValue<Object>> S read(Class<S> clazz) {
return null;
}
});
}
public static <T> List<T> find(Class<T> targetClass, Reader<T> reader) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这里方法调用find(......)在编译时失败,并显示错误消息
Test类型中的find(Class,Reader)方法不适用于参数(Class,new Reader>(){}).
此方法必须返回类型的对象List<KeyValue<Object>>.
这个设计有什么问题以及如何解决这个问题.
谢谢.
find将 T 和 T (在第一个和第二个参数中)定义为相同类型 - 您的调用使用第一个参数中的find类型和第二个参数中的类型。ObjectKeyValue<Object>
在声明中使用两个不同的类型标识符(例如 T 和 X,即public static <T, X extends T> List<T> find(Class<T> targetClass, List<X> reader) )find或修复对 的调用find。
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |