构造函数不能 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 并根据条件决定是否创建新实例。