Java:我的classOf和newArray怎么样?

在这里 ,我想知道如何正确实现Collection#toArray(T[] array) 。 我最烦恼的是array.getClass().getComponentType()Class类型而不是Class 如我所料, Class

因此,我编写了这三个函数:

 @SuppressWarnings("unchecked") static  Class classOf(T obj) { return (Class) obj.getClass(); } @SuppressWarnings("unchecked") static  Class classOf(T[] array) { return (Class) array.getClass().getComponentType(); } @SuppressWarnings("unchecked") static  T[] newArray(Class clazz, int size) { return (T[]) Array.newInstance(clazz, size); } 

然后,我的toArray实现看起来像:

  public  T[] toArray(T[] array) { int size = size(); if (array.length  size) { array[size] = null; } int i = 0; for (E e : this) { array[i] = classOf(array).cast(e); i++; } return array; } 

我现在想知道的是:

这3个辅助function总是安全吗? 特别是,演员总是安全吗?

为什么这些函数不在Java中?

另请参阅这个非常相关的问题: T obj为generics类型T obj.getClass()的类型是Class而不是Class Class 。 为什么?

您的代码看起来非常好,但您可以考虑使用java.util.Arrays.copyOf来简化您的生活。