为什么不允许以下代码?

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;
    }
}


希望对您有所帮助。

09-10 08:23
查看更多