【问题标题】:(Subjective) Invalid Java Class Constructor(主观)无效的Java类构造函数
【发布时间】:2020-08-30 18:37:55
【问题描述】:

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

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

【问题讨论】:

  • 抛出异常?
  • 如果不需要扩展Test,如果参数“无效”想返回null,则将构造函数设为私有,改写静态工厂方法。

标签: java class constructor


【解决方案1】:

如果要在参数无效的情况下返回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 而不是new Test

不过,如果您不想扩展 Test,这只是一个选项。

【讨论】:

    【解决方案2】:

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

    public class Test {
       private a, b;
       public Test(p1, p2) {
           if (p2 == 0) {
               throw new IllegalArgumentException("p2 can't be null");
           }
           a = p1;
           b = p2;
       }
    }
    

    【讨论】:

      【解决方案3】:

      相当多的可能性,取决于你需要什么,这是最重要的。

      如果第二个参数为 0,则可能会抛出 IllegalArgumentException 异常,因此构造函数以错误退出并且未创建类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多