我在我的 Java 代码中使用工厂模式。工厂使用抽象的 CSVHeader 类。 CSVHeader 有一个抽象方法和几个具体方法。 header 创建两个继承类之一(下面称为 TypeOne 和 TypeTwoHeader)。这些类有自己的一个抽象方法版本。
我正在尝试使用 Eclipse 调试器,但我被难住了,因为调试器甚至没有到达 getHeader() 方法的第一行——调试器直接从调用类跳转到 NullPointerException 类。这是异常的输出:
Eclipse java.lang.NullPointerException
at com.company.package.StationWriter.<init>(StationWriter.java:98)
...
我想知道是否有人在 Eclipse 中或在 Java 中使用工厂模式时看到过这种行为?在 <init>
周围做尖括号暗示这是我使用或不使用泛型的方式的问题?我正在使用 Eclipse Indigo Service Release 1
内部版本号:20110916-0149。以下是关于我的实现的更多信息:
HeaderFactory 的getHeader() 方法返回继承自CSVHeader 的子类之一;返回哪个子类取决于输入变量。这种方法从来没有出过问题,现在仍然有效。只有当我从 StationWriter 类调用它时它才会中断,该类以完全相同的方式调用它,只是参数不同。永远不会读取参数,因为代码甚至在进入 getHeader() 方法的主体之前就直接转到 NullPointerException。
StationWriter(接口(interface) CSVWriter 的具体实现)——这显示了第 98 行并且已损坏:
new StationWriter(params) {
...
CSVHeader headerWriter = new HeaderFactory().getHeader(params);
}
DeviceWriter(接口(interface) CSVWriter 的具体实现)——有效:
new DeviceWriter(params) {
...
CSVHeader headerWriter = new HeaderFactory().getHeader(params);
}
HeaderFactory(具体类):
public CSVHeader getHeader(params) {
//when debugging in StationWriter it doesn't even get to this point.
CSVHeader header;
if (something == true) {
header = new TypeOneHeader(params);
} else {
header = new TypeTwoHeader(params);
}
return header;
}
最佳答案
正如在评论中发现的那样,问题是由 null Integer
的拆箱引起的。
关于java - 使用工厂模式时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778313/