class Generic<T> {
void method(T t) {
print(t.getClass().getSimpleName());
}
}
public class Program {
static public void main(String[] args) {
Generic<String> g = new Generic1<>();
g.method(new String());
}
}
期待どおり、出力はString
です。型消去が行われた場合、型の情報が保存されたのはなぜですか?私が正しく理解すれば、出力はObject
であったはずです。タイプ消去後に情報が保存されたのはなぜですか?
Object s = new String();
// Note ----^^^^^^
System.out.println(s.getClass().getSimpleName());
オブジェクトはまだそれが何であるかを知っていると我々はgetClass
を経由して、それを要求したとき、私たちに伝えることができます:これが機能することを同じ理由
実行時に 't'が定義されていますが、型があります。いくつかの読書:https://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens?rq=1 –
クラスのインスタンスを渡す(または格納する)ことは古典的なやり方ですタイプ消去を回避する。 –