我有一个类构造函数,我需要执行一个克隆。从我读过的内容来看,最好的选择是使用复制构造函数,就像在C ++中一样。但是,我遇到了一个问题。如果我的常规"构造函数抛出异常,并且这些异常甚至不可能在复制构造函数"如果第一个语句必须是this
,那么如何实现try-catch。
public class X
{
public X() throws MyException
{
}
public X(final X original)
{
try {
this();
} catch (MyException e)
{
}
}
}
唯一的选择是将throws MyException
添加到复制构造函数吗?
答案 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
}