NullPointerException创建泛型类型实例

时间:2011-08-06 07:31:14

标签: java

这是我的班级

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的实例吗?

有人可以清楚这种情况吗?

2 个答案:

答案 0 :(得分:4)

在你的getGenericClass函数中:

genericType instanceof ParameterizedType

可能返回false,因此persistentClass为null。

答案 1 :(得分:0)

我想说getGenericClass中的if块没有被执行。因此返回了persistentClass的初始值。没有运行代码我可能是错的。