使用try catch构造函数链java

时间:2017-10-12 10:53:04

标签: java constructor exception-handling this

我有一个类构造函数,我需要执行一个克隆。从我读过的内容来看,最好的选择是使用复制构造函数,就像在C ++中一样。但是,我遇到了一个问题。如果我的常规"构造函数抛出异常,并且这些异常甚至不可能在复制构造函数"如果第一个语句必须是this,那么如何实现try-catch。

public class X
{
   public X() throws MyException
   {
   }

   public X(final X original)
   {
      try {
         this();
      } catch (MyException e)
      {
      }
   }
}   

唯一的选择是将throws MyException添加到复制构造函数吗?

1 个答案:

答案 0 :(得分:0)

构造函数将所有数据复制到新实例可能如下所示:

public class X
{
   // some Fields....
   int a, b, c;

   public X() { }

   public X(final X originalX) throws InvalidArgumentException
   {
      if(originalX == null) {
        throw new InvalidArgumentException("originalX should not be null!");
      }
      this.a = originalX.getA();
      //...
   }
   // getter-setter....
}

它在main()或其他任何地方都这样称呼:

// x_1 is filles with Data...
X x_2;
try {
    x_2 = new X(x_1);
} catch(InvalidArgumentException ex) {
    LOG.reportError(ex.getMessage());
    x_2 = new X();  // prevent NullPointer for usage afterwards
}