用Java创建通用数组

public K[] toArray() { K[] result = (K[])new Object[this.size()]; int index = 0; for(K k : this) result[index++] = k; return result; } 

这段代码似乎不起作用,它会抛出exception:

java.lang.ClassCastException:[Ljava.lang.Object; 不能投…

有人能告诉我如何创建一个generics类型的数组? 谢谢。

你不能:你必须把这个类作为一个参数传递:

 public  K[] toArray(Class clazz) { K[] result = (K[])Array.newInstance(clazz,this.size()); int index = 0; for(K k : this) result[index++] = k; return result; } 

您的代码抛出该exception,因为它实际上为您提供了一个Object类型的数组。 Maurice Perry的代码可以正常工作,但是对K[ ]的强制转换会产生警告,因为在这种情况下,由于类型擦除,编译器无法保证类型安全。 但是,您可以执行以下操作。

 import java.util.ArrayList; import java.lang.reflect.Array; public class ExtremeCoder extends ArrayList { public K[ ] toArray(Class clazz) { K[ ] result = clazz.cast(Array.newInstance(clazz.getComponentType( ), this.size( ))); int index = 0; for(K k : this) result[index++] = k; return result; } } 

这将为您提供所需类型的数组,保证类型安全。 我在一段时间后对类似问题的回答中深入解释了这是如何工作的。

好吧,这不起作用K [] result = new K [this.size()];

如果你能上课。 然后:

  Class claz; Test(Class m) { claz = m; }  K[] toArray() { K[] array=(K[])Array.newInstance(claz,this.size()); return array; }