为什么不允许以下代码?
class MyClass {
List<? extends Something> list;
<T extends Something> List<T> myFunc(T t) {
list = new ArrayList<T>(); // ok
list.add(t); // error
return list; // error
}
}
以及如何在维护代码的同时修复代码?也就是说,类成员
list
仅接受Something
子类的对象,并且对于myFunc()
也是相同的? 最佳答案
我认为通用<T>
声明可以在类级别完成。
据我了解,这是因为通配符?
不能用作类型参数。
通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。
因此,我得到的是Java甚至不知道<T extends Something>
和列表,即使它具有扩展相同的上下文,它也不能确保该列表具有相同的类型。
可能的(可能不是您要查找的)解决方案将在类级别声明Generic。
如果执行以下操作可能会起作用:
class Abc <T extends Something>{
List<T> list;
List<T> myFunc(T t) {
list = new ArrayList<T>(); // ok
list.add(t);
return list;
}
}
希望对您有所帮助。