私が理解している限り、Java Genericsは、ジェネリックメソッド(またはジェネリッククラス)のパラメーター型Tに関するすべての情報を消去します。だから使えない
などの新しい表現
new T()
などの式のインスタンス
if(obj instanceof T)
ジェネリックメソッド内。
私の質問は、キャストに関して、パラメーター型Tがジェネリックメソッド内でどのように機能するかです。たとえば、ここには3つの簡単なクラスがあります。
public class People {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public People(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "People [name=" + name + "]";
}
}
public class GenericClass<T> {
public T getCast(People p) {
return (T)p;
}
}
public class App
{
public static void main( String[] args )
{
People p = new People("Kewei");
GenericClass<Integer> genericClass = new GenericClass<Integer>();
Object p_object = genericClass.getCast(p);
System.out.println(p_object);
}
}
(T)p
ジェネリックメソッドでを実行する場合getCast(People p)
。タイプTをオブジェクトとして使用するだけですか?(T)
または、コンパイル時にキャスト全体を削除するだけですか?ブルース・エッケルの「Thinking in Java」を読んだことがありますが、大まかに次のように理解しています。
Javaコンパイラは、コンパイル時にメソッドのエントリ/リーブポイントをチェックして、ジェネリックメソッドの内部整合性を確認し、(コンパイル時に)キャストコードを挿入します。
それは正しい理解ですか?
ありがとう。