我试着理解Wikipedia上描述的延迟初始化模式。有一个接受FRUIT_TYPE类型参数的构造函数。在初始化时,将检查散列映射是否已经具有给定的水果类型,如果没有,则使用构造函数来创建给定类型的水果。然后将水果放入地图中。我复制粘贴了这个示例,它工作得很好。而是如何在没有(Imo)必要字段的情况下创建水果,以将其设置为构造函数中的给定参数,例如。
private FRUIT_TYPE fruitType;
private Fruit(FRUIT_TYPE type){this.fruitType = type}我遗漏了什么?
发布于 2015-11-13 17:20:45
为了回答您的问题,该示例中的单个Fruit实例不知道自己的类型。在人为设计的示例中,它不需要知道,因为类型既不被检查也不被使用。
我强烈建议不要效仿这个例子。它有多个问题,其中最重要的是缺少类型字段:
即使是高并发版本的
类水果{私有静态最终AtomicReference香蕉=新AtomicReference<>();私有FruitType类型;私有水果(FruitType类型) {this.type =类型;someExpensiveCall();}静态水果getBanana() {水果b= banana.get();if (b == null) { banana.compareAndSet(null,新香蕉());b= banana.get();}返回b;}
https://stackoverflow.com/questions/33689081
复制相似问题