Java 将ArrayList转换为Array
我在java中将数组列表转换为数组时遇到了一些问题 我有一个名为Table的类,它包含一个名为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
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]);