Why List<SuperClassType> newList = new ArrayList<SubClassType>() violates type safety?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Is `List` a subclass of `List `? Why aren’t Java’s generics implicitly polymorphic?
我已经宣布这些课程:
1 | class Cereal{} |
还有:
1 2 3 4 5 | public class Flakes extends Cereal{ public static void main(String[] args) { List<Cereal> newList = new ArrayList<Flakes>(); } } |
但是,当我试图编译这些Java源代码时,出现了编译错误:
1 | Type mismatch: cannot convert from ArrayList<Flakes> to List<Cereal> |
我的问题是:为什么不可能转换?是否违反了类型安全规则?还是?
提前感谢您的回复。
一句话:
但是你可以用野猫给谷类食品上界。
1 | List<? extends Cereal> list = new Arraylist<Flakes>(); |
现在这个列表接受任何谷物,但是记住你不能添加除空以外的任何东西。
1 | List<? super Flakes> list = new ArrayList<Cereal>(); |
此列表接受任何薄片和超级类型薄片。即。。一个谷类食品和一个java.lang.object。
因为除非定义,否则类型是刚性的。您要尝试以下操作:
1 | List<? extends Cereal> newList = new ArrayList<Flakes>(); |
这意味着它的列表对象扩展了
1 2 3 | ArrayList<Flakes> newList = new ArrayList<Flakes>(); ArrayList<Cereal> moreGeneralList = newList; moreGeneralList.add(new NonFlakeCereal()); |