我在Java代码中使用Factory模式。工厂使用抽象的CSVHeader类。 CSVHeader有一个抽象和几个具体方法。标头创建两个继承类之一(下面称为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
构建ID:20110916-0149。这里有更多关于我的实现的内容:
HeaderFactory的getHeader()方法返回一个从CSVHeader继承的子类;返回哪个子类取决于输入变量。这种方法从未出现过问题,但仍然有效。它只会在我从StationWriter类调用它时中断,它以完全相同的方式调用它,只是使用不同的参数。永远不会读取参数,因为代码在进入getHeader()方法的主体之前直接进入NullPointerException。
StationWriter(接口CSVWriter的具体实现) - 这显示第98行并且已损坏:
new StationWriter(params) {
...
CSVHeader headerWriter = new HeaderFactory().getHeader(params);
}
DeviceWriter(接口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;
}
答案 0 :(得分:1)
正如在评论中发现的那样,问题是由取消装箱空Integer
引起的。