(主观)无效的Java类构造函数

(主观)无效的Java类构造函数,java,class,constructor,Java,Class,Constructor,我正在编写一个java类,其中给定的参数可能无效,但仍然是正确的类型。我希望我的类接受两个整数,但第二个整数不允许为零。我有什么可能中断构造函数,或者手动返回null?我的可能性是什么 public class Test { private a, b; public Test(p1, p2) { if (p2 == 0) return null; a = p1; b = p2; } } 构造函数没有返回值,因此返回null不是选项。惯

我正在编写一个java类,其中给定的参数可能无效,但仍然是正确的类型。我希望我的类接受两个整数,但第二个整数不允许为零。我有什么可能中断构造函数,或者手动返回null?我的可能性是什么

public class Test {
   private a, b;
   public Test(p1, p2) {
       if (p2 == 0) return null;
       a = p1;
       b = p2;
   }
}

构造函数没有返回值,因此返回null不是选项。惯用的做法是抛出:

公开课考试{ 私人a、b; 公共测试P1、p2{ 如果p2==0{ 抛出新的IllegalArgumentExceptionp2不能为空; } a=p1; b=p2; } }
相当多的可能性,取决于你需要什么,这是最重要的事情


如果第二个参数为0,则可以抛出IllegalArgumentException,这样构造函数将带错误退出,并且不会创建类。

如果要在参数无效的情况下返回null,则不能使用构造函数

相反,将构造函数设为私有,并编写一个静态工厂方法:

private Test(int a, int b) {
  // Whatever.
}

public static Test create(int a, int b) {
  if (/* a and b are invalid */) {
    return null;
  }
  return new Test(a, b);
}
然后调用Test.create而不是newtest


但是,如果您不想扩展测试,这只是一个选项。

引发异常?如果您不需要扩展测试,并且如果参数无效,则希望返回null,请将构造函数设为私有,并改为编写静态工厂方法。