我最近開始閱讀Joshua Bloch撰寫的Effective Java。我發現構建器模式[書中的項目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(); }}我收到以下編譯器錯誤:一個包含有效java.BuilderPattern.NutritionalFacts.Builder的封閉實例。NutritionalFacts n = new NutritionalFacts.Builder(10).carbo(23).fat(1).build();我不明白該消息的含義。請解釋。上面的代碼類似于Bloch在他的書中建議的示例。
3 回答

一只斗牛犬
TA貢獻1784條經驗 獲得超2個贊
使構建器成為一個static類。然后它將起作用。如果它是非靜態的,則將需要其擁有類的實例-重點是不要擁有它的實例,甚至禁止在沒有構建器的情況下創建實例。
public class NutritionFacts {
public static class Builder {
}
}
添加回答
舉報
0/150
提交
取消