gpt4 book ai didi

java - Java中的逆变和继承有什么区别?

转载 作者:行者123 更新时间:2023-12-01 19:34:11 27 4
gpt4 key购买 nike

我有一个父类 A 和它的子类 B。这两个片段有什么区别:

    public static void main (String[] args) {
ArrayList<? super A> e = new ArrayList<>();
B thing = new B();
e.add(thing);
System.out.println(e.get(0));
}
    public static void main (String[] args) {
ArrayList<A> e = new ArrayList<>();
B thing = new B();
e.add(thing);
System.out.println(e.get(0));
}

最佳答案

ArrayList<? super A>之间的区别和ArrayList<A>是前者可以被分配一个ArrayList<T>的对象哪里TA 的父类(super class)或A本身。

具体来说,这是有效的:

ArrayList<? super A> listOfSuperA = new ArrayList<Object>();

这不是:

ArrayList<A> listOfA = new ArrayList<Object>();

这意味着您可以从 listOfA 中获取不同类型的值和listOfSuperA :

A a = listOfA.get(0); // valid
Object o = listOfA.get(0); // valid, because A can be converted to Object.
A a2 = listOfSuperA.get(0); // invalid, because listOfSuperA could contain Objects, which are not convertible to A
Object o2 = listOfSuperA.get(0); // valid, because whatever is in listOfSuperA, it can be converted to Object

This might be useful if you want to learn more about where to use ? super T

关于java - Java中的逆变和继承有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445616/

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