我有一个如此定义的类:
public class Test {
static <T> List<Class<T>> filter(List<Class<T>> input) {
// code here
}
public static void main(String[] args) {
List<Class<? extends Throwable>> list =
new ArrayList<Class<? extends Throwable>>();
filter(list);
}
}
filter
中的main
方法调用会产生以下编译错误:
The method filter(List<Class<T>>) in the type Test is not applicable for the
arguments (List<Class<? extends Throwable>>)
我不明白为什么<T>
没有绑定到<? extends Throwable>
。有没有可以帮助我的仿制药大师?
答案 0 :(得分:4)
您可以通过将参数声明为:
来修复它static <T> List<Class<T>> filter(List<Class<? extends T>> input) {
// code here
}
至于为什么,我不确定。通过尝试各种事情直到红线消失,修复了泛型编译问题太多。不满意。
答案 1 :(得分:4)
我认为这里的问题是?
没有类型可以做。
考虑一下,为简单起见,我们是否将Class
替换为AtomicReference
。
static <T> void filter(List<AtomicReference<T>> input) {
T value = input.get(0).get();
input.get(1).set(value);
}
如果input
由AtomicReference<Integer>
和AtomicReference<String>
组成,我们就会遇到麻烦。
存在多态性时指向指针的基本问题很难。如果没有泛型,我们可以直接挥手。对于泛型,我们需要实际意味着什么。
答案 2 :(得分:0)