Я переписываю код, и я решил, как воссоздать класс, поскольку существует фиксированное количество листов, я создаю их как перечисления. Это решение основано на удобочитаемости паттерна строителя и конструктора телескопа.
Код, который я захватил некоторые .xls файлы, добавляет заголовки (и читает некоторые из других .xls файлов) и, возможно, некоторые под-листы. Затем он объединяет различные листы вместе определенным образом, чтобы делать вкладки в основной книге Excel. Моя проблема заключается в том, что некоторые вкладки рабочей книги занимают различное количество листов - это аргументы. Я пытаюсь применить шаблон построителя. Это код, который я пытаюсь написать:
public enum workBookSheet {
mySheet1("Name1","mainSheet1.xls",true,1).addSubSheet("pathToSubSheet1.xls"),
mySheet2("Name2","mainSheet2.xls",true,2).addHeaderSheet("pathToHeaders.xls").addSubsheet("pathtoSubSheet2.xls");
private String tabName;
private String mainSheetName;
private Boolean available;
private Integer order;
private String subSheetName;
private String headerSheetName;
private workBookSheet(String tabName, String mainSheetName, Boolean available, Integer order){
this.tabName = tabName;
this.mainSheetName = mainSheetName;
this.available = available;
this.order = order;
}
public workBookSheet addSubSheet(String subSheetName){
this.subSheetName = subSheetName;
return this;
}
public workBookSheet addHeaderSheet(String headerSheetName){
this.headerSheetName = headerSheetName;
return this;
}
}
Ошибка, которую java дает мне, кажется, говорит о том, что Java ожидает моего объявления enum (список с разделителями-запятыми "конструкторы enum" вверху), чтобы иметь только конструктор, а не дополнительные методы. Я могу переместить эти методы в метод "строитель" ниже, без жалоб.
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
Является ли это единственным способом реализации шаблона построителя для перечисления? Это требует, чтобы я запускал отдельный метод, который не слишком много хлопот. Мне кажется, что я нарушаю шаблон, хотя (я думаю, это не так уж плохо, если это работает.)
N.B Я хорошо осмотрелся, чтобы узнать, задал ли кто-нибудь еще этот вопрос, на SO или в другом месте в Интернете. Самое близкое, что я нашел, было вопросом здесь на Enums и Factories, но это не совсем отвечает на мой вопрос. Также я знаю, что это не совсем шаблон построения, так как у меня нет отдельного класса, который затем принимает метод build(), который создает новое перечисление. Я предполагаю, что это корень проблемы в моем первоначальном дизайне, но я относительно новичок в Java.
Итак, есть ли лучший способ использовать шаблон построителя для перечисления Java? Или это то, что у меня "достаточно близко"?