私はジェネリック医薬品を 1 時間使用してきましたが、疑問があります。私はこのようなクラスを持っているとしましょう:
class Pair<T>
{
public T getFirst() { return first; }
}
基本的に私の本はこう言っています:
型消去:型変数は消去され、それらの境界型 (または境界のない変数の場合はオブジェクト) に置き換えられます。
したがって、私の本の声明によると、JVMのコードは次のようになります。
class Pair
{
public Object getFirst() { return first; }
}
今私がする場合:
Pair<String> pair = new Pair<>(); //I use Java 7 diamond syntax here.
pair.getFirst()
戻り値の型をからObject
に変換する必要がありますか?String
getFirst
今conisder:
ArrayList<String> files = new ArrayList<>();
同じ本は言っています(上記のコードに関しては):
....the files contain array of Strings.
上記の例の型消去規則について、私は非常に混乱していArrayList
ます。この場合、どうして配列が配列files
を持っていることを知っているのString
でしょうか? (これは型消去規則に矛盾しています)
編集:
の結果のコードPair
(つまり、型消去がどのように行われたか) を確認するには、javap
ここでツールを使用するにはどうすればよいですか?
ここで何か不足していますか?