コードを実行するときに暗黙的にdをdoubleにキャストするため、これを実行するとClassCastException
エラーが発生します。しかし、もしdへの参照をObject[]
に変更すると、それはset関数のパラメータになることはできません。 Object[]
を受け入れるようにset関数を変更すると、すべて正常に動作しますが、タイプがN
でないオブジェクトに対してsetを呼び出すと、実行時にクラスが失敗します。汎用クラスから配列を返す
私は、古い配列(またはそのクローン)をget()
とすることができ、新しい配列にset()
データを入れることができる解決策が必要です。
public class Foo<N> {
public static void main(String[] args) {
Foo<Double> foo = new Foo<Double>();
Double[] d = foo.get();
// do stuff to d ...
foo.set(d);
}
N[] data;
public Foo() {
data = (N[]) new Object[2];
}
public N[] get() {
return (N[]) data;
}
public void set(N[] data) {
this.data = data;
}
}
[Javaで汎用配列を作成するにはどうすればいいですか?](http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – Julien
そのqの複製。 – avisnacks
このhttp:// stackoverflowを使用することができます。com/a/3403976/2513573型を抽出し、Array.newInstanceを使って配列を作成する – AdamSkywalker