java.lang.ClassCastException: java.util.Arrays$ArrayList不能被投到java.util.ArrayList中的解决办法

295 阅读1分钟

在这篇文章中,我们将看到如何解决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$ArrayListArrayList不同,所以当我们试图将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。