Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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转换为Array_Java_Arrays_Exception_Arraylist_Null - Fatal编程技术网

Java 将ArrayList转换为Array

Java 将ArrayList转换为Array,java,arrays,exception,arraylist,null,Java,Arrays,Exception,Arraylist,Null,我在java中将数组列表转换为数组时遇到了一些问题 我有一个名为Table的类,它包含一个名为appenders的数组列表,该列表接受字符串。当我使用toArray()函数时,它似乎不会将数组列表转换为数组 我之所以知道这一点,是因为当我运行listary()函数时,它会给出错误: java.lang.NullPointerException 这是代码。任何帮助都将不胜感激 public class Table { public ArrayList<String> appli

我在java中将数组列表转换为数组时遇到了一些问题

我有一个名为Table的类,它包含一个名为
appenders
的数组列表,该列表接受字符串。当我使用
toArray()
函数时,它似乎不会将数组列表转换为数组

我之所以知道这一点,是因为当我运行listary()函数时,它会给出错误:

java.lang.NullPointerException

这是代码。任何帮助都将不胜感激

public class Table {
    public ArrayList<String> applicants;
    public String appArray[];

    public Table() {
        applicants = new ArrayList<String>();
    }

    public void addApplicant(String app) {
        applicants.add(app);
    }

    public void toArray() {
        int x = applicants.size();
        String[] appArray = new String[x];
        appArray = applicants.toArray(appArray);
    }

    public void list() {
        for (int i = 0; i < applicants.size(); i++) {
            System.out.println(applicants.get(i));
        }
    }

    public void listArray() {
        for (int i = appArray.length; i > 0; i--) {
            System.out.println(appArray[i]);
        }
    }
}
公共类表{
公共阵列列表申请人;
公共字符串数组[];
公共表(){
申请人=新ArrayList();
}
公共应用程序(字符串应用程序){
申请者。添加(应用程序);
}
公屋空置{
int x=申请人.size();
字符串[]数组=新字符串[x];
appArray=申请人。toArray(appArray);
}
公众作废清单(){
对于(int i=0;i0;i--){
系统输出println(appArray[i]);
}
}
}

这是因为您在此处对方法中的
appArray
字段进行阴影处理:

 int x = applicants.size();
 String[] appArray = new String[x];
 appArray = applicants.toArray(appArray);
当您应该使用类中已声明的
appArray
字段时,您将创建一个名为
appArray
的新局部变量

你应该这样做

public void toArray()
{
    appArray = applicants.toArray(new String[0]);
}

因为ArrayList和Array都应该只有字符串,所以您可以这样做

appArray = applicants.toArray(new String[0]);

更多信息请参见。

作为对此答案感兴趣的人,我可以问一下,为什么需要将ArrayList转换为String[]类型?既然已经是这种类型,为什么applicators.toArray()不起作用?@AndrewMartin函数返回
Object[]
,因此您应该将其强制转换为类类型数组。这样,函数将知道要返回的数组类型。另一种选择是使用
List#toArray(T[]array)
,查看
ArrayList#toArray
代码以获取示例:或者在这里:此代码抛出java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为[Ljava.lang.String;我认为您需要说appArray=applicators.toArray(新字符串[application.size()]);@krico你说得对。我已经修复了我的代码,使用重载的
toArray(T[])
方法。我以为你指的是第一个代码片段。
appArray = applicants.toArray(new String[0]);