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();
由于类型擦除,这是不可能的。
以下是解决方法:
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();
你可以不传递类来完成它:
class Model<T> {
Class<T> c = (Class<T>) DAOUtil.getTypeArguments(Model.class, this.getClass()).get(0);
}