【发布时间】:2017-10-12 10:53:03
【问题描述】:
我有一个类构造函数,我需要执行一个克隆。从我读过的内容来看,最好的选择是使用复制构造函数,就像在 C++ 中一样。但是,我有一个问题。如果我的“常规”构造函数抛出异常,并且在“复制构造函数”中甚至不可能出现此类异常,那么如果第一条语句必须是 this,我该如何实现 try-catch。
public class X
{
public X() throws MyException
{
}
public X(final X original)
{
try {
this();
} catch (MyException e)
{
}
}
}
是否唯一的选择是将throws MyException 添加到复制构造函数?
【问题讨论】:
-
为什么要打电话给
this()? -
如果您调用
this(),您只需初始化一个新的空对象。如果你想要一个包含所有值的真实副本,你应该向x(final X original)添加一个空检查,然后将每个字段从原始复制到this.<field> -
"如果我的“常规”构造函数抛出异常,而这种异常在“复制构造函数”中甚至不可能发生“即使你看不到方法,如果
throws存在,假设您需要管理它或重新抛出异常。不要假设方法声明中定义的异常不会发生。如果我需要更新你的类并且我看到定义了异常,我知道这是意料之中的,所以我不能在我的更新版本中抛出该异常而不必担心。合同已经签了。
标签: java constructor exception-handling this