gpt4 book ai didi

Java 泛型 : wildcards again

转载 作者:行者123 更新时间:2023-12-01 15:37:28 26 4
gpt4 key购买 nike

我正在尝试创建一个仅接受特定类的容器。使用泛型如下:

    static class Test1<C extends Test1> {
C field = null;
public C getField() {
return field;
}
public void setField(C field) {
this.field = field;
}
}
static class Test2 extends Test1{
}

class MainTest {
public static void main(String[] args) throws Exception {
List<Test1<? extends Test1>> list = new ArrayList<Test1<? extends Test1>>();
Test1<Test2> newInstance = new Test1<Test2>();
list.add(newInstance);
Test1<Test2> value = list.get(1);
}
}

只是想了解为什么此 List> 会接受 newInstance 对象,但在我取回“Test1 value”时会发生编译时错误?有机会解决这个问题吗?

提前致谢。

更新许多人注意到“Test1<? extends Test1> ,其中?可能不等于 Test2。”我完全同意,但据我了解,在这种情况下,我需要将提取的值转换为 Test1<Test2>这意味着在这种情况下泛型的全部意义都消失了......如果我错了,请纠正我。

最佳答案

因为当你 list.get(1)返回Test1<? extends Test1> ,其中?可能不等于 Test2 .

另一方面list.add(...)接受 Test1<? extends Test1> ,即带有任何泛型参数的 Test1,它是 Test1 的继承者。

关于Java 泛型 : wildcards again,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com