[解決済み] 効率的なJavaのビルダーパターン
2022-05-18 08:39:37
質問
最近、Joshua BlochのEffective Javaを読み始めました。私はBuilderパターン[この本の項目2]のアイデアが本当に面白いと思いました。私はそれを私のプロジェクトで実装しようとしましたが、コンパイルエラーが発生しました。以下は、私がやろうとしていたことの本質的な部分です。
複数の属性を持つクラスとそのビルダークラス。
public class NutritionalFacts {
private int sodium;
private int fat;
private int carbo;
public class Builder {
private int sodium;
private int fat;
private int carbo;
public Builder(int s) {
this.sodium = s;
}
public Builder fat(int f) {
this.fat = f;
return this;
}
public Builder carbo(int c) {
this.carbo = c;
return this;
}
public NutritionalFacts build() {
return new NutritionalFacts(this);
}
}
private NutritionalFacts(Builder b) {
this.sodium = b.sodium;
this.fat = b.fat;
this.carbo = b.carbo;
}
}
上のクラスを使おうとするクラス。
public class Main {
public static void main(String args[]) {
NutritionalFacts n =
new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
}
}
以下のようなコンパイラーエラーが発生します。
を含む包含するインスタンス を含むインスタンスが必要です。 が必要です。 NutritionalFacts n = new NutritionalFacts.Builder(10).carbo(23).fat(1).build();
メッセージの意味がわかりません。説明をお願いします。上記のコードはBlochが著書で提案した例と同様です。
どのように解決するのですか?
ビルダーを
static
クラスに変換します。そうすればうまくいくでしょう。もしそれが非静的であれば、その所有するクラスのインスタンスを必要とするでしょう - そしてポイントはそのインスタンスを持たないことであり、ビルダーなしでインスタンスを作ることさえ禁止しています。
public class NutritionFacts {
public static class Builder {
}
}
参照 ネストされたクラス
関連
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
JQuery DataTable 详解
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
jd-gui Java Exceptionが発生しました。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
Spring boot runs with Error creating bean with name 'entityManagerFactory' defined in class path resource
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
自動配線された依存性のインジェクションに失敗しました。
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。