私は任意の数の配列をマージするメソッドを実装しようとしました。Javaでは配列のバリエーションが可能ですか?
@SuppressWarnings("unchecked")
public static <T> T[] merge(T[]... arrs) {
int length = 0;
for (T[] arr : arrs) {
length += arr.length;
}
T[] merged = (T[]) new Object[length];
int destPos = 0;
for (T[] arr : arrs) {
System.arraycopy(arr, 0, merged, destPos, arr.length);
destPos += arr.length;
}
return merged;
}
コンパイルしても問題ありませんでした。
String[] a = {"a", "b", "c"};
String[] b = {"e", "f"};
String[] c = {"g", "h", "i"};
String[] m = merge(a,b,c);
このコードは正常にコンパイルが、それは例外をスロー:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at ntalbs.test.ArrayMerge.main(ArrayMerge.java:25)
コードがもっともらしいと正常にコンパイルに見えますが、動作しませんとで例外をスローそれから私はこのように、この方法をテストしましたランタイム。なぜこのコードが機能しないのか説明できますか?私は何が欠けていますか?
私は問題は 'T []マージ=(T [])新しいオブジェクト[長さ]だと思う;'ありません配列varargs。 – torque203
'String []'にキャストできない 'new Object []'を作成しています –