【问题标题】:Reason of Type mismatch Error : convert ArrayList<SubClass1> to List<SuperClass>? [duplicate]类型不匹配错误的原因:将 ArrayList<SubClass1> 转换为 List<SuperClass>? [复制]
【发布时间】:2015-06-09 06:08:54
【问题描述】:

B 类扩展 A 类。我们可以这样说:

A a = new B();

但是为什么我们不能使用这段代码:

List<A> listOfA = new ArrayList<B>();

当然,我们可以使用generics to avoid that error。但我的问题是关于出现该错误的原因。

【问题讨论】:

    标签: java arraylist type-conversion type-mismatch


    【解决方案1】:

    对我来说,原因是 Java 开发人员不想重复他们在数组中犯的错误。例如,

     Object x[] = new String[3];
     x[0] = new Integer(0);
    

    这段代码给出了一个运行时异常java.lang.ArrayStoreException

    Source

    【讨论】:

      【解决方案2】:

      试试这个

      List<? extends A> listOfA = new ArrayList<B>();
      

      【讨论】:

      • ,当然可以!我们可以使用泛型来避免错误。但我的问题是关于why that error occurs?
      【解决方案3】:

      如果你能做到这一点,你就可以写

      listOfA.add(new A());
      

      A 类型的对象插入ArrayList&lt;B&gt;

      【讨论】:

        【解决方案4】:

        这里的规则很简单。ListArrayList 的超类型(或接口)。所以你可以安全地将ArrayList 引用分配给List 变量。但这适用于非泛型类型.List & ArrayList 就像模板,如果你以泛型方式创建它,变量声明的类型必须与你传递给实际对象类型的类型相匹配。这是泛型类型安全,所以你知道(来自编译器透视),您可以对该列表中的每个对象进行类型安全操作。

        【讨论】:

        • 因此,如果您定义类似 List 列表的内容,则必须指定具有 MyObjType 的 List 的任何具体实现
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-15
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多