在java中使用泛型时出现空指针异常

Pab*_*blo 4 java oop generics java-ee

因为我有一段时间没有使用泛型,所以我对这个例子很困惑.

我有以下基础抽象类:

public abstract class ExcelReader<T>{
     protected T type;
     protected GenericResolver resolver;

     public ExcelReader(){
        super();
        resolver=ResolverFactory.createResolver(type.getClass()); 
     }
}
Run Code Online (Sandbox Code Playgroud)

现在我的子类如下:

public class POIReader<T> extends ExcelReader<T>{

}
//...Implementation of methods ommited for brevity
Run Code Online (Sandbox Code Playgroud)

现在在我的服务中,我正在以下列方式创建一个新对象:

ExcelReader<MessageDTO> reader=new POIReader<MessageDTO>();
Run Code Online (Sandbox Code Playgroud)

但是,当调用ExcelReader构造函数时,type属性为null,并且在创建解析程序时抛出NullPointer异常.

我想您可以了解我正在尝试使用上面的代码片段,我已经看到使用属性字段来保存Parametized Class类型的示例.

但是我很困惑为什么我在type属性中得到null,我怎么能避免它.非常感谢.

Jon*_*eet 13

你正在打电话,type.getClass()但在那一点type保证是空的.没有其他代码可以设置它,所以你怎么期望它工作?你说你对为什么它是空的感到困惑 - 但是你没有展示任何会使它成为非空的东西.

我怀疑你想要的东西:

public abstract class ExcelReader<T>{
     protected final Class<T> type;
     protected GenericResolver resolver;

     public ExcelReader(Class<T> type){
        this.type = type;
        resolver = ResolverFactory.createResolver(type); 
     }
}
Run Code Online (Sandbox Code Playgroud)

您还想在子类上引入相同类型的参数.