オブジェクトを配列に追加する一般的な(それが正しい用語かどうかはわかりません..)メソッドがあります。
@SuppressWarnings("unchecked")
public static <T>T[] appendArray(T[] a, T b)
{
T[] temp = (T[])new Object[a.length + 1];
System.arraycopy(a, 0, temp, 0, a.length);
temp[a.length] = b;
return temp;
}
Eclipse では、このコードはエラーも警告も表示しません (抑制された「チェックされていない」警告を除いて)。 .
Integer[] a=new Integer[]{1,2,3};
Integer b=4;
a = appendArray(a, b);
ClassCastException
この場合、投稿したコードの 2 番目のスニペットの 3 行目です。エラーは、[Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
なぜそれがこれを行うのかわかりませんし、理解していません.. つまり、ジェネリックを使用しているのに、インスタンス化中Object[]
に型にキャストしたもの以外があるのはなぜですか? T
そして、それが行番号 4 (もちろん、コードの 1 ビット目) にある場合、コードの 2 ビット目の 3 行目ではなく、そこで例外がスローされないのはなぜですか?