Java:if语句后从另一个调用构造函数

时间:2018-12-14 14:49:43

标签: java constructor

我有两个构造函数,第一个构造函数创建一些过程,例如创建新对象,并且没有if \ for语句。并且此构造函数无法更改,甚至不能更改为私有。

但是第二个构造函数得到一个int值,其工作方式类似于 如果否定抛出异常 如果是肯定的,请做一些处理 但是如果num = 0以避免重复代码,我想调用第一个构造函数。

实现这种代码的正确方法是什么?请注意,这些构造函数在同一类中。

public class SomeClass{

  public SomeClass() {
    //Do some process
  }

  public SomeClass(int num) {  
    if (num == 0) {
        this(); //here we have an issue
    }
  }
}

3 个答案:

答案 0 :(得分:3)

创建某种工厂:

public class SomeClass
{
  // This is the original constructor
  public SomeClass()
  {
    // Do some process
  }

  // New constructor expecting num > 0
  private SomeClass(int num)
  {
    // Do whatever you want
  }

  public static SomeClass getIt(int num) throws Exception
  {
    if (num < 0)
      throw new Exception("...");
    else if (num > 0)
      return (new SomeClass(num));
    else
      return (new SomeClass());
  }

} // SomeClass

答案 1 :(得分:2)

对另一个构造函数(this();)的调用必须首先在该构造函数中进行。

您可能希望重构代码,将“处理”逻辑放入方法中:

public Constructor() {
    this.processConstructor();
}

public Constructor(int num) {
    if(num == 0) {
        this.processConstructor();
    }
}

private void processConstructor() {
    //Do some process
}

答案 2 :(得分:0)

反过来做:

public class SomeClass{

  public SomeClass() {
    this(1 /* or some sensible default */);
  }

  public SomeClass(int num) {
    // Do stuff.
  }
}

作为一般原则,您应该只具有一个实际上“有用的东西”的构造函数。然后,其他重载仅存在以提供合理的默认值来调用该构造函数。