私はJavaでArray.newInstance()
がT[]
ではなくObject
を返すことに気付きました。このメソッドは、Javaがジェネリック型をサポートする前に導入されているため、理解できます。Array.newInstanceの汎用バージョンはありますか?
しかし、これと同等の汎用バージョンが存在しないことは驚きです。 Java 7のArrays.copyOf
は同じではありません。新しいダミー配列(すべてのヌルオブジェクトが内部にある)を作成するのではなく、パラメータの内容をコピーします。
これの実装は些細なようですが、それをJREに追加しない理由はありますか?または私はちょうど1つを見つけることができませんか?
UPDATE
私が質問の誤解を停止するために私自身の「些細な」実装を提供するものと思われます。
class MyArrayUtil {
//Generic version for classes
@SuppressWarnings("unchecked")
public static <T> T[] newArrayOf(T[] t, int len){
return (T[]) Array.newInstance(t.getClass().getComponentType(), len);
}
//For array of int
public static int[] newArrayOf(int[] t, int len){
return new int[len];
}
//For other primitive types...
}
質問の答えではないため、私はこのコードを回答として掲示しません。問題は、実装する方法ではなく、理由や既存のコードに対するものです。
UPDATE
私はArrays.copyOf
にそれを近づけるために、コードを更新している、と利点は、プログラマは、単に別のタイプのコードを調整するために、パラメータの種類を変更することができます。また、私はプリミティブ型のためにArray.newInstance
の使用を排除しました。
いいえ、これをコンパイル時に安全に実装することは不可能です。たとえば、 'List []'の新しいインスタンスを作成することはできません。コンパイラは、 'T 'の型が何であるかを決して知らないので、クライアントコードが安全であることを保証することはできません。 –
Muel
'Arrays.copyOf'はジョブを実行することができるので、明白な理由はありません。 –
'Arrays.copyOf'は、コピーされる配列の具体的な型を決定します。 – pstanton