可能性の重複:
Java Generics: Array containing genericsJavaでMap.Entry <K, V>配列をどのようにインスタンス化しますか?
私は追加して、配列から要素を削除する2つの方法が含まれているJavaクラスを持っています。ジェネリックにするには、サブタイプが必要です。そのため、さまざまな種類のオブジェクトを処理できるはずです。
問題は、MapEntry(MapEntryがjava.util.Map.Entryの実装である)をサブタイプとして使用してインスタンス化するときです。これにより、Object配列をMapEntry配列に変換しようとすると、ClassCastExceptionがスローされます。
array = (T[])(new Object[array.length + 1]);
array = (T[])(new Object[array.length - 1]);
アレイのサイズは、それぞれ1減少/増加させるために使用されます。私はこのため、次の行(Tサブタイプである)である推測しています。私はIntegers、Strings、Objectsの配列でもこれを使用しています。
はまた、それが明示など、
を、私はこのために配列を使用する必要があると述べていないので、何のリストですまだ可能な限り一般的なように、クラスを維持しながら、この問題を回避する方法はありますか?
編集:問題を解決するために管理します。ここでは、作業コードは次のとおりです。すべての助けを
array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length + 1);
array = (T[])Array.newInstance(array.getClass().getComponentType(), array.length - 1);
ありがとう:D
タイプパラメータがバインドされていない場合、 'T'へのキャストは実際には何もしません。あなたはもう少し文脈を提供できますか?あなたのクラスの型シグニチャとそれをどのようにインスタンス化していますか? – millimoose
これは、ジェネリックアレイを持つことはできません。私は 'Object' []を使い、あなたのメソッドで値を返すときにキャストします。これはまだ安全ではないキャストですが、少しだけローカライズされています。 (あるいは、 'ArrayList'がどのように実装されているかを見て、それを行います。) – millimoose