【问题标题】:cast List to ArrayList [duplicate]将列表转换为 ArrayList [重复]
【发布时间】:2013-05-07 07:05:08
【问题描述】:

当我想在方法返回的List 引用中转换ArrayList 对象时:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

asList 方法的返回类型是对ArrayList 对象的List 引用,这意味着我可以将它转换为ArrayList 引用。 这样:

String[] colors = { "black", "blue", "yellow" };
ArrayList<String> links = (ArrayList<String>) Arrays.asList(colors) ;

但是这段代码出现了运行时错误:

线程“主”java.lang.ClassCastException 中的异常: java.util.Arrays$ArrayList 不能转换为 java.util.ArrayList

为什么会这样?

【问题讨论】:

  • 从 Arrays.asList 返回的 ArrayList 不是实际的数组列表,它只是一个包装器...不允许在列表中进行任何修改
  • 你的“包装”是什么意思??

标签: java collections casting


【解决方案1】:

您可以将其转换为 ArrayList 的假设不成立。

ArrayList 是实现List 接口的具体类型。不保证方法asList 将返回这种类型的实现。

实际上使用的类型是java.util.Arrays$ArrayList

使用具体类而不是接口。可以被认为是不好的做法。当您有特殊类型的类并且您想向未来的开发人员提示这种类型专用于该任务时,这种方法会更好。

但 API 应该以最抽象的方式公开。这就是使用List 的原因。

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 2012-05-03
    • 2013-05-14
    • 2014-01-09
    • 2014-05-15
    • 2019-03-15
    • 2014-01-09
    • 2011-10-15
    • 2012-04-06
    相关资源
    最近更新 更多