Java 如何将对象[]转换为特定类型数组

Java 如何将对象[]转换为特定类型数组,java,Java,我认为我无法转换以下内容: List<B> c = new ArrayList<B>(); c.add(***); object[] a = c.toArray(); B[] b = (B[])a; //How to cast a back to B[]? listc=newarraylist(); c、 添加(***); 对象[]a=c.toArray(); B[]B=(B[]a//如何将a转换回B[]? 如何在Java中实现这一点?如果a的每个元素都是B类型,您有

我认为我无法转换以下内容:

List<B> c = new ArrayList<B>();
c.add(***);
object[] a = c.toArray();
B[] b = (B[])a; //How to cast a back to B[]?
listc=newarraylist();
c、 添加(***);
对象[]a=c.toArray();
B[]B=(B[]a//如何将a转换回B[]?

如何在Java中实现这一点?

如果
a
的每个元素都是
B
类型,您有两个选择(如果不是,您需要首先解释发生了什么):


此外,这仅在B是实类型而不是泛型参数时才有效

您不能通过石膏来完成此操作。你必须复制数据

B[] b = new B[a.length];
for (int i=0; i<a.length; i++){
   b[i] = (B)a[i];
}
B[]B=新的B[a.长度];

对于(int i=0;i,其他答案显示了如果您确实需要转换
对象[]
,该怎么办-但是有一种更好的方法。请更改代码以从以下内容开始:

List<B> c = new ArrayList<B>();
c.add(***);
B[] b = c.toArray(new B[c.size()]);
listc=newarraylist();
c、 添加(***);
B[]B=c.toArray(新的B[c.size()]);
或:

listc=newarraylist();
c、 添加(***);
B[]B=c.toArray(新的B[0]);
@Jon Skeet的观点是正确的,但以下是Intellij IDEA检查信息中的一些内容:

将集合转换为数组有两种样式:使用 预先调整大小的数组(如c.toArray(新字符串[c.size()])或使用 空数组(如c.toArray(新字符串[0])

在较旧的Java版本中,建议使用预大小的数组,因为 反射调用,这是创建适当大小的数组所必需的 非常慢。但是,由于OpenJDK 6的更新很晚,所以这个调用是无效的 内部化,使空数组版本的性能 相同,有时甚至更好,相比于预大小的版本。 同时,传递预先确定大小的数组对于并发或 同步收集作为大小之间的数据竞争是可能的 和toArray调用,这可能会在 数组,如果集合在操作期间同时收缩


B
是实际类型还是泛型类型参数?
a
的值是多少?你是说
Object
而不是
Object
?一个简短但完整的程序在这里真的很有帮助…a实际上是从List的toArray方法中获得的。
toArray()
,或者
toArray(B.class)
?同样,一个简短但完整的程序确实会有帮助…
System.arraycopy()
复制数组值的效率要高得多正如您在文章中所说。谢谢。我可以这样做吗?我可以suspecting@king_nak是的,我的错。我使用的版本只有在编译时不知道B.class的情况下才有意义。
List<B> c = new ArrayList<B>();
c.add(***);
B[] b = c.toArray(new B[c.size()]);
List<B> c = new ArrayList<B>();
c.add(***);
B[] b = c.toArray(new B[0]);