gpt4 book ai didi

java - 静态工厂方法每次调用时都会创建一个新对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:35 24 4
gpt4 key购买 nike

在 Effective Java 中提到“与构造函数不同,静态工厂方法不需要在每次调用时都创建一个新对象”。

class Car{
String color;
Boolean spoiler;

public Car(String s){
color=s;
spoiler = false;
}

public static Car redCar(){
return new Car("red");
}
}

在主类中:

    Car c2 = Car.redCar();
Car c3 = Car.redCar();

c2 和c3 是不同的对象。我没有得到“不需要每次调用都创建一个新对象”的上下文。

最佳答案

因为那是你所做的:

public static Car redCar(){
return new Car("red");
}
// ^ here

如果你想返回相同的值,你可以这样做:

private static final Car RED_CAR = new Car("red");

public static Car redCar(){
return RED_CAR;
}

重点是调用 new Car()总是返回一个新实例。调用 Car.newInstance() 意味着 Car 类可以决定做什么。

例如:

private static final Map<String, Car> CARS = new HashMap<>();

public static Car newInstance(final String colour){
return CARS.computeIfAbsent(colour, Car::new);
}

这使用 Car 构造函数作为 method reference到新Map.computeIfAbsent方法,如果该颜色的 Car 尚未出现在 Map 中,则调用它。这是一个简单的(非线程安全的)缓存实现。

所以:

final Car one = Car.newInstance("red");
final Car two = Car.newInstance("red");
System.out.println(one == two) // true

关于java - 静态工厂方法每次调用时都会创建一个新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com