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()]);