2016-08-28 19 views
1
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を経由して、それを要求したとき、私たちに伝えることができます:これが機能することを同じ理由

+0

実行時に 't'が定義されていますが、型があります。いくつかの読書:https://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens?rq=1 –

+0

クラスのインスタンスを渡す(または格納する)ことは古典的なやり方ですタイプ消去を回避する。 –

答えて

3

これはジェネリックスとは関係ありません。

各オブジェクトknows it class object。これは単純に文字列オブジェクトのランタイムクラスであるため(「作成中」)、「文字列」を出力として取得しています。

8

関連する問題