请帮帮我。我是学生。
我有抽象的class A
。 Class A1 extends A
。
如果我写
ArrayList<A> a = ArrayList<A1> a1
我收到错误
Type mismatch: cannot convert from ArrayList<A1> to ArrayList<A>
答案 0 :(得分:1)
您无法使用TypeErasure
从ArrayList<A1>
投射到其他类型ArrayList<A>
,因此我建议您尝试在java中使用WildCard
来解决此问题
ArrayList<? extends A1>a1=new ArrayList<A1>();
ArrayList<? extends A1> a = a1;
答案 1 :(得分:-1)
在以下a
列表声明中,
ArrayList<A> a
类型规则说a
列表只能包含精确A
类型的对象:例如,它不能包含任何其他类型的类型对象,它扩展了超类型A
。
要解决此问题,您可以使用Bounded Wildcards,如下所示......
ArrayList<? extends A> a = a1
现在a
列表将接受A
的任何子类的列表。在这里,?代表未知类型,但这种未知类型实际上是Shape的子类型。 (注意:它可能是A
本身,或者是某个子类;它不需要字面上扩展A
)。