我尝试理解Wikipedia中描述的延迟初始化模式。有一个构造函数接受FRUIT_TYPE类型参数。在初始化时,正在检查哈希映射是否已经具有给定的水果类型,如果不是,则使用构造函数来创建给定类型的水果。然后将水果放入地图中。我复制粘贴的例子,它工作正常。但是如何在没有(imo)必要字段的情况下创建水果以将其设置为构造函数中的给定参数,例如:克。
private FRUIT_TYPE fruitType;
private Fruit(FRUIT_TYPE type){this.fruitType = type}
我错过了什么?
答案 0 :(得分:0)
要回答您的问题,该示例中的单个Fruit实例不知道自己的类型。在设计的例子中,它不需要知道,因为该类型既没有被检查也没有被使用过。
我强烈建议不要遵循这个例子。它有多个问题,其中最重要的是缺少类型字段:
它非常人为,难以使用。这些方面的内容可能会更接近地匹配典型用例:
class Fruit {
private static final AtomicReference<Fruit> banana = new AtomicReference<>();
private FruitType type;
private Fruit(FruitType type) {this.type = type; someExpensiveCall(); }
static Fruit getBanana() {
Fruit b = banana.get();
if (b == null) {
banana.compareAndSet(null, new Banana());
b = banana.get();
}
return b;
}
}