コードを書き直しています。クラスを再作成する方法を決めました。固定数のシートがあるので、enumとして作成しています。 。これはビルダー・パターンと伸縮可能なコンストラクターの可読性に基づいた決定です。Java Enumでbuilderパターンを使用することはできますか
コードいくつかの.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私は、他の誰かがこの質問をしているかどうかを見ていました。またはウェブの他の場所に置くことができます。私が見つけた最も近いのはEnumsとFactoryについての質問ですが、それは私の質問にはあまり答えません。また、新しい列挙型を作成するbuild()メソッドを受け入れる独立したクラスを持たないので、これはかなりビルダーパターンではないことを認識しています。私はこれが私の最初のデザインの問題の根源だと思うが、私は比較的Javaに新しい。
Javaの列挙型でビルダーパターンを使用するより良い方法はありますか?それとも私は「十分に近い」ものですか?など
これはあなたがこれまでに使ってきたものですか、それともこの新しいコードですか? – Pureferret
両方のビット。私はビルダーを使いたいと思っていましたが、いくつかの答えを見つけましたが、好きではありませんでした。それから、誰かを助けた場合に備えて、私はこの質問に私の解決策を分かち合うと思いました。 –
ありがとう!これにより、私のenumクラスはずっと読みやすくなりました。 –