2009-09-03 97 views
3

在代碼中,如果我寫一個代碼行是這樣的:如何獲取泛型參數類型的類實例

GClass<Double> x = new GClass<Double>(); 

而讓說,這個類是這樣的:

public static class GClass<T> { 
    private T value = null; 
    public GClass() { 
    // What is T? 
    } 
} 

在哪裏我插入了「什麼是T?」這個問題,我不想要這個值(即null),但是它的類型(即Double)。

+0

在什麼情況下你需要這樣做?無論如何,實例化gClass的客戶端肯定會意識到它是參數化類型? – Robert 2009-09-03 09:43:36

回答

10

在執行時您無法找到T,除非您添加一個構造函數參數以獲取Class<T>參數並在您的情況下通過Double.class傳遞它。然後,您可以存儲該類並稍後使用它。

這是由於類型擦除 ...基本上泛型只是編譯器法寶插入相應的管型和檢查的事情應該好起來的。

查看Type Erasure部分的優秀Java Generics FAQ

您可能也想看到Neal Gafter的博客文章super type tokenstype literals