在这篇文章中,我们将看到如何解决java.lang.ClassCastException: java.util.Arrays$ArrayList不能被投到java.util.ArrayList。
ClassCastException
这是一个运行时异常,表明代码试图将一个对象投给一个不是实例的子类。
java.lang.ClassCastException的原因:java.util.Arrays$ArrayList不能被投到java.util.ArrayList。
尽管静态方法Arrays.asList()
返回List,但它返回的java.util.Arrays$ArrayList
与ArrayList不同,所以当我们试图将Arrays.asList()
投入到ArrayList
时,会产生异常。
让我们借助于例子来理解。
package org.arpit.java2blog;
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayToList {
public static void main(String[] args) {
String[] countries = {"India","China","Bhutan"};
ArrayList
输出。
Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayList cannot be cast to class java.util.ArrayList (java.util.Arrays$ArrayList and java.util.ArrayList are in module java.base of loader 'bootstrap')
at org.arpit.java2blog.ArrayToList.main(ArrayToList.java:11)
这里是Arrays.asList()
方法的源代码。
@SafeVarargs
@SuppressWarnings("varargs")
public static
你可以看到,在java.util.Arrays中存在一个静态的内部类,它与java.util.ArrayList不同。
修复java.lang.ClassCastException: java.util.Arrays$ArrayList不能被投到java.util.ArrayList的问题
使用ArrayList的构造函数
如果你必须拥有java.util.ArrayList的实例,那么你可以使用ArrayList的构造函数创建ArrayList实例。
ArrayList<String> listOfCountries = new ArrayList(Arrays.asList(countries));
下面是完整的程序
package org.arpit.java2blog;
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayToList {
public static void main(String[] args) {
String[] countries = {"India","China","Bhutan"};
ArrayList
输出。
[India, China, Bhutan]
以下是ArrayList构造函数的源代码
/**
* Constructs a list containing the elements of the specified
* collection, in the order they are returned by the collection's
* iterator.
*
* @param c the collection whose elements are to be placed into this list
* @throws NullPointerException if the specified collection is null
*/
public ArrayList(Collection
将Arrays.asList()分配给List引用而不是ArrayList
我们可以声明List而不是ArrayList来避免异常。由于java.util.Arrays$ArrayList实现了List接口,我们可以将其分配给List引用。
List<String> listOfCountries = Arrays.asList(countries);
下面是完整的程序
package org.arpit.java2blog;
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] countries = {"India","China","Bhutan"};
List
输出。
[India, China, Bhutan]
以上就是关于如何解决[固定]java.lang.ClassCastException: java.util.Arrays$ArrayList不能被投到java.util.ArrayList。