在Java中是否有可能让构造函数返回该类的另一个实例,而不是构造/返回自身?
有点像
public class Container {
private static Container cachedContainer = new Container(5,false);
private int number;
public Container(int number, boolean check) {
if (number == 5 && check) {
return cachedContainer; // <-- This wouldn't work
}
this.number = number;
}
}
在该示例中,如果您创建一个包含数字5的对象(并使用“check”标志),它将“中断”构造,而是为您提供一个已包含5的预先存在的对象。导致这种中断。
答案 0 :(得分:15)
不,这就是静态factory method pattern进来的地方
您可以执行自定义计算并确定是否在静态工厂方法
中创建实例考虑这个例子:
public static Container createContainer(int number, boolean check) {
if (number == 5 && check) {
// returned cached instance
}
// construct new instance and return it
}
来自有效的java
第1项:考虑静态工厂方法而不是构造函数
要点:
另见
答案 1 :(得分:5)
那是不可能的,因为构造函数只是意味着为对象设置稳定状态,以后可以安全使用。简而言之,一旦初始化了对象,构造函数就可用于设置内部状态。所以返回任何东西都没有意义。
你可以做的是拥有一个可以为你创建对象的公共静态方法。类似的东西:
public class Container {
private static Container cachedContainer = new Container(5);
private int number;
public Container(int number) {
this.number = number;
}
public static Container getContainer(int number, boolean check){
if (number == 5 && check) {
return cachedContainer;
} else return new Container(number);
}
答案 2 :(得分:1)
你需要这样的东西:
public class Container {
private static final Container CACHED_CONTAINER = new Container(5);
private final int number;
private Container(final int number) {
this.number = number;
}
public static Container container(final int num, final boolean check) {
if (num == 5 && check) {
return CACHED_CONTAINER;
}
return new Container(num);
}
}