构造函数不能 return 一个新实例吗?
Can a constructor NOT return a new instance?
是否可以让构造函数根据参数决定不创建新实例?例如:
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
}
}
}
有没有办法正确地做同样的事情?
构造函数不是 return 实例。 new
运算符 (as part of the instance creation expression) 创建实例并由构造函数初始化它。一旦你理解了这一点,你就会意识到你不能按照你的建议去做。
您的调用代码应该决定它是否创建实例,而不是构造函数。
构造函数无法控制 returned 的内容。但是,您可以使用静态工厂方法以获得更大的灵活性:
public static Foo newInstance(int n) {
if (n < 0) {
return null;
} else {
return new Foo(n);
}
}
当提供无效数字时,抛出异常比 return null
更好:
if (n < 0) {
throw new IllegalArgumentException("Expected non-negative number");
} ...
你不能做你想做的事。但是,如果您的要求是根据某些条件创建实例,您可以为此使用静态方法 class 并根据条件决定是否创建新实例。
是否可以让构造函数根据参数决定不创建新实例?例如:
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
}
}
}
有没有办法正确地做同样的事情?
构造函数不是 return 实例。 new
运算符 (as part of the instance creation expression) 创建实例并由构造函数初始化它。一旦你理解了这一点,你就会意识到你不能按照你的建议去做。
您的调用代码应该决定它是否创建实例,而不是构造函数。
构造函数无法控制 returned 的内容。但是,您可以使用静态工厂方法以获得更大的灵活性:
public static Foo newInstance(int n) {
if (n < 0) {
return null;
} else {
return new Foo(n);
}
}
当提供无效数字时,抛出异常比 return null
更好:
if (n < 0) {
throw new IllegalArgumentException("Expected non-negative number");
} ...
你不能做你想做的事。但是,如果您的要求是根据某些条件创建实例,您可以为此使用静态方法 class 并根据条件决定是否创建新实例。