[英]How to convert ArrayList to Array
我有一个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);
}
现在我想把这个ArrayList
转换成一个数组; 我试过这个:
Person[] people = (Person[]) valid.toArray();
但这是抛出异常
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()]);
您不能将 Object[] 转换为 Person[]。 toArray 方法需要返回正确的类型。 该方法有一个重载版本,它采用您的类型数组。
Person[] people = valid.toArray(new Person[valid.size()]);
http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#toArray(T[])
你可以尝试这样的事情:
Person[] people = valid.toArray(new Person[valid.size()]);
正如您在 Javadocs 中看到的, List.toArray()
返回一个Object[]
,因此列表的通用类型信息丢失了。 这就是为什么你的演员表不起作用。
如果您需要保留通用信息,则必须使用替代的toArray()
方法,该方法采用所需类型的数组(例如,因为您可能想要将List<String>
转换为List<CharSequence>
等在)。
您需要做的就是传递所需类型的空数组,例如:
list.toArray(new Person[]{});
然而,这有点浪费,因为它强制toArray()
方法在运行时构造一个适当大小的新数组(通过反射)。 相反,如果您传入一个已经足够大的数组,它将重用该数组,避免反射和额外分配。
list.toArray(new Person[list.size()]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.