Java 如何将ArrayList转换为Array
我有一个Java 如何将ArrayList转换为Array,java,arrays,Java,Arrays,我有一个人班 public class Person { private int age; private String first; private boolean valid; } 我已经创建了一个Person对象的ArrayList ArrayList<Person> valid = new ArrayList<Person>(); for(Person
人
班
public class Person
{
private int age;
private String first;
private boolean valid;
}
我已经创建了一个Person
对象的ArrayList
ArrayList<Person> valid = new ArrayList<Person>();
for(Person p : in)
{
valid.add(p);
}
但这是一个例外
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.net.Person;
你必须这样做
Person[] people = valid.toArray(new Person[valid.size()]);
无法将对象[]强制转换为人员[]。toArray方法需要返回正确的类型。该方法有一个重载版本,它接受您类型的数组
Person[] people = valid.toArray(new Person[valid.size()]);
你能试试这样的东西吗:
Person[] people = valid.toArray(new Person[valid.size()]);
正如您在Javadocs中看到的,返回一个
对象[]
,因此列表的泛型类型信息丢失。这就是你的演员阵容不起作用的原因
如果需要保留泛型信息,则必须使用采用所需类型数组的替代方法(因为您可能希望将列表
转换为列表
等等)
您只需传递所需类型的空数组,例如:
list.toArray(new Person[]{});
但是这有点浪费,因为它强制toArray()
方法在运行时(通过反射)构造一个大小合适的新数组。相反,如果传入一个已经足够大的数组,它将重用该数组,从而避免反射和额外分配
list.toArray(new Person[list.size()]);
当然有:)很高兴我能help@Antoniossss-已将0替换为有效的.size()仍在工作我不明白如何操作?Person[]people=valid.toArray(新的Person[0])<如果要传递的数组不是大数组,则code>toArray将分配新数组以适合所有内容。被接受的答案怎么了?我已经接受了,不知道它是怎么改变的,反正我又接受了
list.toArray(new Person[list.size()]);