Я использую шаблон Factory в своем коде Java. Фабрика использует абстрактный класс CSVHeader. CSVHeader имеет один абстрактный и несколько конкретных методов. Заголовок создает один из двух наследуемых классов (ниже называются TypeOne и TypeTwoHeader). Эти классы имеют свою собственную версию одного абстрактного метода.
Я пытаюсь использовать отладчик Eclipse, но я в тупике, потому что отладчик даже не попадает на первую строку в методе getHeader () - отладчик переходит прямо из вызывающего класса в класс NullPointerException. Вот вывод из исключения:
Eclipse java.lang.NullPointerException
at com.company.package.StationWriter.<init>(StationWriter.java:98)
...
Мне интересно, видел ли кто-нибудь еще такое поведение в Eclipse или при использовании фабричного шаблона в Java? Угловые скобки вокруг <init>
подразумевают, что это проблема с тем, как я использую или не использую Generics? Я использую Eclipse Indigo Service Release 1
Идентификатор сборки: 20110916-0149. Вот еще о моей реализации:
Метод getHeader () из HeaderFactory возвращает один из подклассов, которые наследуются от CSVHeader; какой подкласс возвращается, зависит от входных переменных. У этого метода никогда не было проблем, и он все еще работает. Он прерывается только когда я вызываю его из класса StationWriter, который вызывает его точно так же, только с разными аргументами. Аргументы никогда не читаются, потому что код переходит прямо в NullPointerException, прежде чем он даже входит в тело метода getHeader ().
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;
}