是否有可能让构造函数根据参数决定不创建新实例?例如:
public class Foo{
public Foo(int n){
if(n<0){
//DO NOT make this
}
else{
//Go ahead and make this instance
}
}
}
我知道不可能这样做:
public class Foo{
public Foo(int n){
if(n<0){
//DO NOT make this
this = null;
}
else{
//Go ahead and make this instance
}
}
}
有没有办法正确地做同样的事情?
答案 0 :(得分:7)
构造函数无法控制将返回的内容。但是,您可以使用静态工厂方法以获得更大的灵活性:
public static Foo newInstance(int n) {
if (n < 0) {
return null;
} else {
return new Foo(n);
}
}
当提供无效数字时,最好抛出异常而不是返回null
:
if (n < 0) {
throw new IllegalArgumentException("Expected non-negative number");
} ...
答案 1 :(得分:2)
构造函数不返回实例。 new
运算符(as part of the instance creation expression)创建实例,构造函数初始化它。一旦你理解了这一点,你就会意识到你无法按照你的意思行事。
您的调用代码应决定是否创建实例,而不是构造函数。
答案 2 :(得分:0)
你无法做你想做的事。但是,如果您的要求是基于某些条件创建实例,则可以为该类提供静态方法,并根据条件决定是否创建新实例。