gpt4 book ai didi

java - java中返回泛型类成员的参数化方法

转载 作者:行者123 更新时间:2023-12-02 03:18:14 25 4
gpt4 key购买 nike

为什么不允许使用以下代码?

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>声明可以在类级别完成。

据我了解,这是因为通配符 ?不能用作类型参数。

The wildcard is never used as a type argument for a generic method invocation, a generic class instance creation, or a supertype

所以我得到的是 Java 不会知道 <T extends Something>以及列表,即使它具有扩展相同的上下文,它也不能确保它是相同的类型。

一个可能的(可能不是您正在寻找的)解决方案将在类级别声明泛型。

如果我们这样做,它可能会起作用:

class Abc <T extends Something>{
List<T> list;
List<T> myFunc(T t) {
list = new ArrayList<T>(); // ok
list.add(t);
return list;
}
}

希望对您有所帮助。

关于java - java中返回泛型类成员的参数化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010684/

25 4 0
文章推荐: macros - C 中没有定义的宏
文章推荐: typescript - 如何从 ApplicationContext 获取实体的存储库
文章推荐: select - 为什么我的