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

标签 java oop generics jakarta-ee

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

我有以下基本抽象类:

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

     public ExcelReader(){
        super();
        resolver=ResolverFactory.createResolver(type.getClass()); 
     }
}

现在我的子类如下:

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

}
//...Implementation of methods ommited for brevity

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

ExcelReader<MessageDTO> reader=new POIReader<MessageDTO>();

但是,当调用 ExcelReader 构造函数时,type 属性为 null,因此在创建解析器时抛出 NullPointer 异常。

我想您可以了解我正在尝试使用上面的代码片段做什么,并且我已经看到使用属性字段来保存参数化类类型的示例。

但是我很困惑为什么我在 type 属性中得到 null,我该如何避免它。 非常感谢。

最佳答案

您正在调用 type.getClass() 但此时 type 保证为空。还没有其他代码有机会设置它,那么您期望它如何工作?您说您对为什么它为 null 感到困惑 - 但您没有显示任何可以使其非 null 的内容。

我怀疑你想要这样的东西:

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); 
     }
}

您也想在子类上引入相同类型的参数。

关于java - 在 Java 中使用泛型时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8760967/

相关文章:

java - 从 clojure 使用 java 第三方库的步骤

java - 从对象内部访问属性

javascript - 如何在父类(super class)构造函数中初始化/设置值?在 typescript 中

c# - 是否有语法进行反向类型推断?

c# - 由于泛型类型推断的限制,无法使用泛型来改进 API

java - double 在 java 中添加非常奇怪?

java - 如何通过 Java 的 Runtime api 获取我的 Java 程序使用的内存?

java - 如何为mahout和hadoop添加maven依赖?

python - 为什么在 Python 中从类内部访问类变量需要 "self."?

generics - 是否可以使用 Windows 7 访问 GATT(通用属性配置文件)蓝牙设备?