使用工厂模式时出现NullPointerException

时间:2012-03-19 21:34:08

标签: java eclipse debugging factory-pattern

我在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;
} 

1 个答案:

答案 0 :(得分:1)

正如在评论中发现的那样,问题是由取消装箱空Integer引起的。