我看到了代码Java Builder Pattern。除了下面的代码,一切都很好:
public static void main(String[] args) {
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
.calories(100).sodium(35).carbohydrate(27).build();
}
NutritionFacts
构造函数是私有的,Builder
内部类是静态的。因此,我们可以使用NutritionFacts.Builder
访问此类,但为什么它使用新关键字,如new NutritionFacts.Builder(240, 8)
?
答案 0 :(得分:6)
new NutritionFacts.Builder()
创建Builder
类的新实例,而不是NutritionFacts
因此营养因素的构造函数无关紧要(可以是私有的,受保护的,公共的,包级别的)Builder
是NutritionFacts
中定义的静态类,因此您不需要NutritionFacts
的实例来创建Builder
类的新实例和Builder
可以调用其顶级类(私有,受保护,公共,包级别)的任何构造函数答案 1 :(得分:1)
“...如果成员或构造函数被声明为private,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。” (JLS §6.6.1)
这也意味着嵌套类(在顶级类的主体内)可以访问其私有成员和构造函数。实际上,这是您可能希望在代码中使用嵌套类的主要原因之一。