为什么Java不允许将List <string>对象分配给List <object>对象?

时间:2015-04-30 19:48:34

标签: java generics collections

可能是一个非常愚蠢的问题,但我仍然希望清除这个概念。请帮帮我。

    List<Object> myObjectArrayList=new ArrayList<Object>();
    Object myObject=new Object();
    myObjectArrayList.add(obj);
    myObjectArrayList.add("My String");

这里使用Java的Generics功能我将集合的类型设置为String。 但myObjectArrayList可以将 myObject 添加到列表中,因为Object类是默认情况下Java中所有类的父类。 现在

    List<String> myStringArrayList = new ArrayList<String>(); 
    myObjectArrayList = myStringArrayList;

当我在做的时候 myObjectArrayList = myStringArrayList; 我收到编译错误:

 Type mismatch: cannot convert from List<String> to List<Object>

为什么Java不允许分配List&lt;字符串&gt;将对象转换为List&lt;对象&gt;?我的问题是,如果我有一个父类列表和子类列表,为什么Java不允许我们将子类列表对象分配到父类列表对象?

1 个答案:

答案 0 :(得分:1)

一个词:遗传。

String是一个Object,但Object不必是String。 通常的例子是点和粒子。粒子是质量点。粒子是一个更多的点。所以你可以说粒子是质量为零的点,但点不是粒子。 你有一个点的集合,但是你想要点的集合是粒子的集合。这是List<Object>List<String>的错误。 相反的情况很好,但你没有尝试。