Java 方法,详细信息

Java 方法,详细信息,java,arrays,list,arraylist,toarray,Java,Arrays,List,Arraylist,Toarray,为什么它不起作用 List<String> lista = new ArrayList<>(); lista.add("Lol"); lista.add("ball"); String [] array = (String[])lista.toArray(); List lista=new ArrayList(); 添加(“Lol”); 添加(“球”); 字符串[]数组=(字符串[])lista.toArray(); 它

为什么它不起作用

List<String> lista = new ArrayList<>();
        lista.add("Lol");
        lista.add("ball");
        String [] array = (String[])lista.toArray();
List lista=new ArrayList();
添加(“Lol”);
添加(“球”);
字符串[]数组=(字符串[])lista.toArray();
它抛出一个
RunTimeException(ClassCastException)
,我知道还有另一个方法用于返回列表中包含的对象,但是幕后发生了什么?我的意思是,我正在将一个对象数组转换为一个字符串数组。所以它应该编译,但它没有。 提前谢谢。

由于,返回一个
对象[]
。在运行时,列表不知道是否有字符串对象。从那里你可以看到错误的来源

不能将
对象[]
类型强制转换为
字符串[]

由于,返回一个
对象[]
。在运行时,列表不知道是否有字符串对象。从那里你可以看到错误的来源


不能将
对象[]
类型转换为
字符串[]

对象数组不是字符串数组,并且不能转换为字符串数组


检查。

对象数组不是字符串数组,不能被强制转换为一个

检查。

该版本的toArray()返回
对象[]
。即使对象数组中的所有对象都是字符串,也不能将其强制转换为字符串数组

您可以使用
lista.toArray(新字符串[lista.size()])版本以正确获取实际类型。

该版本的toArray()返回
对象[]
。即使对象数组中的所有对象都是字符串,也不能将其强制转换为字符串数组

您可以使用
lista.toArray(新字符串[lista.size()])版本以正确获取实际类型。

改用toArray(T[]a)

List lista=new ArrayList();
添加(“Lol”);
添加(“球”);
String[]array=lista.toArray(新字符串[1]);
这确保toArray返回String[]类型的数组

正如其他人所指出的,toArray()返回Object[]类型的数组,并且从Object[]到String[]的强制转换是非法的。

请改用toArray(T[]a)

List lista=new ArrayList();
添加(“Lol”);
添加(“球”);
String[]array=lista.toArray(新字符串[1]);
这确保toArray返回String[]类型的数组


正如其他人所指出的,toArray()返回Object[]类型的数组,并且从Object[]到String[]的强制转换是非法的。

List lista=new ArrayList();-->List lista=new ArrayList()

List lista=new ArrayList();-->List lista=new ArrayList()

有两个toArray()版本。您可以使用另一个

有两个toArray()版本。您可以使用另一个

正如我在问题中所述,我知道这一点。但是我想知道为什么。由于使用了泛型,很明显这是一个字符串数组,正如我在问题中指定的那样,我知道它。但是我想知道为什么。由于使用了泛型,很明显它是一个字符串数组
List<String> lista = new ArrayList<String>();
    lista.add("Lol");
    lista.add("ball");
    String [] array = lista.toArray(new string[1]);