いくつかのコードを書き直していて、クラスを再作成する方法を決定しました。シートの数は固定されているため、列挙型として作成しています。これは、ビルダーパターンと伸縮コンストラクターの読みやすさに基づいた決定です。
私が取得しているコードは、いくつかの.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が私の列挙型宣言(上部にある「列挙型コンストラクター」のコンマ区切りリスト)にはコンストラクターのみが含まれ、追加のメソッドは含まれないことを期待していることを示しているようです。これらのメソッドを、文句なしに以下の「ビルダー」メソッドに移動できます。
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
これは、列挙型にビルダーパターンを実装する唯一の方法ですか?別のメソッドを実行する必要がありますが、それほど面倒ではありません。しかし、それは私がパターンを破っているような気がします(これがうまくいけば、それほど悪いことではないと思います)。
NB私は、SOやウェブ上の他の場所で、他の誰かがこの質問をしたかどうかをよく調べました。私が見つけた最も近いものは、ここで列挙型とファクトリに関する質問でしたが、それは私の質問に完全には答えていません。また、新しい列挙型を作成するbuild()メソッドを受け入れる別のクラスがないため、これがビルダーパターンではないことも認識しています。これが私の最初の設計の問題の根本だと思いますが、私はJavaに比較的慣れていません。
では、Java列挙型でビルダーパターンを使用するためのより良い方法はありますか?それとも、私が持っているものは「十分に近い」ですか?