Class Model<T>{
private T t;
.....
private void someMethod(){
//now t is null
Class c = t.getClass();
}
.....
}
當然它會拋出NPE。如何獲得泛型類
Class c = t.getClass();
如果我的實例爲空,我應該使用什麼語法來獲得類T? 這可能嗎?
Class Model<T>{
private T t;
.....
private void someMethod(){
//now t is null
Class c = t.getClass();
}
.....
}
當然它會拋出NPE。如何獲得泛型類
Class c = t.getClass();
如果我的實例爲空,我應該使用什麼語法來獲得類T? 這可能嗎?
由於類型擦除,這是不可能的。
有以下解決方法:
class Model<T> {
private T t;
private Class<T> tag;
public Model(Class<T> tag) {
this.tag = tag;
}
private void someMethod(){
// use tag
}
}
可以與反思這樣做:
Field f = this.getClass().getField("t");
Class tc = f.getType();
它不會工作。 'tc'將是'Object' – axtavt 2010-02-08 17:07:31
你可以不用傳入類:
class Model<T> {
Class<T> c = (Class<T>) DAOUtil.getTypeArguments(Model.class, this.getClass()).get(0);
}
欲瞭解更多解釋:http://www.artima.com/weblogs/viewpost.jsp?thread=208860
如果你的實例是null,怎麼會沒有類類型? – froadie 2010-02-08 16:54:43
盡我所知,這是不可能的。請記住,泛型是編譯時,而不是運行時。處理這個問題的更常見的方法是存儲一個保持類的Class對象(如果你真的需要的話)。 – Kylar 2010-02-08 16:58:01
A同意,Kylar和froadie:你需要爲「t」添加一個額外的非空值檢查。 – 2010-02-08 17:53:56