这是我的班级
public class ManagerForm<M extends Stuff>{
private Class<M>clazz;
private M manager;
public void setWorker(M manager){
this.manager=manager;
}
public M getWorker(){
return this.manager;
}
private final Class<M> getGenericClass() {
Class<M> persistentClass = null;
Type genericType = getClass().getGenericSuperclass();
if (genericType instanceof ParameterizedType) {
ParameterizedType pType = ((ParameterizedType) genericType);
// obtaining first generic type class
persistentClass = (Class<M>) pType.getActualTypeArguments()[0];
}
return persistentClass;
}
public ManagerForm(){
this.clazz=getGenericClass();
this.manager=this.clazz.newInstance();
}
}
在行this.user=this.clazz.newInstance();
的默认构造函数中,我有NullPointer异常Request processing failed; nested exception is java.lang.NullPointerException
有人能帮助我吗?到底是怎么回事?为什么clazz会创建null实例?我的错误在哪里?
提前致谢。
UPD
genericType属于Object类型,不是ParameterizedType的实例。这就是函数getGenericType返回null的原因。为什么呢?
当我使用Type genericType = getClass()
代替Type genericType = getClass().getGenericSuperclass();
时,我可以获得ManagerForm类型。但是ManagerForm doest也属于ParameterizedType的实例吗?
有人可以清楚这种情况吗?
答案 0 :(得分:4)
在你的getGenericClass函数中:
genericType instanceof ParameterizedType
可能返回false,因此persistentClass为null。
答案 1 :(得分:0)
我想说getGenericClass中的if块没有被执行。因此返回了persistentClass的初始值。没有运行代码我可能是错的。