Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将列表强制转换为ArrayList_Java_Collections_Casting - Fatal编程技术网

Java 将列表强制转换为ArrayList

Java 将列表强制转换为ArrayList,java,collections,casting,Java,Collections,Casting,当我想在从方法返回的列表引用中强制转换ArrayList对象时: public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } 但此代码导致运行时错误: 线程“main”java.lang.ClassCastException中的异常: 无法将java.util.Arrays$ArrayList转换为java.util.ArrayList 为什么会发生这种情况?您可以将

当我想在从方法返回的
列表
引用中强制转换
ArrayList
对象时:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}
但此代码导致运行时错误:

线程“main”java.lang.ClassCastException中的异常: 无法将java.util.Arrays$ArrayList转换为java.util.ArrayList


为什么会发生这种情况?

您可以将其强制转换为ArrayList的假设是无效的

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

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

使用具体类而不是接口。可以被认为是坏习惯。如果您有特殊类型的类,并且希望向未来的开发人员提示该类型专用于该任务,那么这种方法会更好


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

您可以将其强制转换为ArrayList的假设无效

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

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

使用具体类而不是接口。可以被认为是坏习惯。如果您有特殊类型的类,并且希望向未来的开发人员提示该类型专用于该任务,那么这种方法会更好


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

从Arrays.asList返回的ArrayList不是实际的ArrayList,它只是一个包装器。。。它不允许在列表中进行任何修改“包装器”是什么意思?从数组返回的ArrayList.asList不是实际的ArrayList,它只是一个包装器。。。哪个不允许在列表中进行任何修改?你说的“包装器”是什么意思??
String[] colors = { "black", "blue", "yellow" };
ArrayList<String> links = (ArrayList<String>) Arrays.asList(colors) ;