oracle docは、ジェネリックはテクニック・コール・タイプの消去を使ってjavaで実装されていると言います。Javaタイプの消去と配列
- 型パラメータが無制限であれば、その境界またはオブジェクトとジェネリック型のすべての型パラメータを交換してください。したがって、生成されるバイトコードには、通常のクラス、インタフェース、およびメソッドのみが含まれます。
- 型の安全性を維持するために、必要に応じて型キャストを挿入します。
- 拡張ジェネリック型で多型を保持するためのブリッジメソッドを生成します。だから、
私は、ジェネリッククラスを持っているとして、以下のコンテナを言う場合:
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
public List<T> getValueList(){
return valueList;
}
}
それは同等のクラスは型消去によって処理された後、次のようになります:間違った場合
class Container{
Object initialValue;
List valueList=new ArrayList();
public List getValueList(){
return valueList;
}
}
は私を修正ここに
同様に、上記のクラスを以下のように変更する場合
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
T[] arrayValue;
public Container(T[] array){
arrayValue=array;
}
public List<T> getValueList(){
return valueList;
}
}
は、これに相当するでしょうか?
class Container{
Object initialValue;
List valueList=new ArrayList();
Object[] arrayValue;
public Container(Object[] array){
arrayValue=array;
}
public List getValueList(){
return valueList;
}
}
これが本当であるならば、私はこのようにも持っている必要があります。 T[] arrayValue=new T[10];
//時間のコンパイルエラーが発生しました。上記のステートメントとして は
Object[] arrayValue=new Object[10];
型消去は、Javaでの配列のためにどのように機能するかを明確にする必要
に変換になるだろう?
で、あなたが見ているエラーは何ですか具体的にはどのようなコードですか?あなたが求めていることは本当にはっきりしません。 – pvg
なぜT [] arrayValue = new T [10];許可されていません。なぜパラメータ化された型の配列Objectを作成できないのですか? –