2010-02-08 140 views
3
Class Model<T>{ 

    private T t; 

    ..... 


    private void someMethod(){ 
     //now t is null 
     Class c = t.getClass(); 
    } 

    ..... 

} 

當然它會拋出NPE。如何獲得泛型類

Class c = t.getClass(); 

如果我的實例爲空,我應該使用什麼語法來獲得類T? 這可能嗎?

+0

如果你的實例是null,怎麼會沒有類類型? – froadie 2010-02-08 16:54:43

+2

盡我所知,這是不可能的。請記住,泛型是編譯時,而不是運行時。處理這個問題的更常見的方法是存儲一個保持類的Class對象(如果你真的需要的話)。 – Kylar 2010-02-08 16:58:01

+0

A同意,Kylar和froadie:你需要爲「t」添加一個額外的非空值檢查。 – 2010-02-08 17:53:56

回答

7

由於類型擦除,這是不可能的。

有以下解決方法:

class Model<T> { 

    private T t; 
    private Class<T> tag; 

    public Model(Class<T> tag) { 
     this.tag = tag; 
    } 

    private void someMethod(){ 
     // use tag 
    } 
} 
-1

可以與反思這樣做:

Field f = this.getClass().getField("t"); 
Class tc = f.getType(); 
+1

它不會工作。 'tc'將是'Object' – axtavt 2010-02-08 17:07:31