At subclass Compilation Error: Unreachable catch block for CloneNotSupportedException
At subclass Compilation Error: Unreachable catch block for CloneNotSupportedException
在SuperClass
中,当我覆盖clone()
方法时就没有问题了。
public class SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
当我通过完全相同的方式覆盖 SubClass
中的 clone()
方法时(复制和粘贴 clone()
来自 super [=35 的方法=]) 它显示编译错误
public class SubClass extends SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
SubClasss
中包含 catch
的行出现编译错误:
Unreachable catch block for CloneNotSupportedException. This exception is never thrown from the try statement body
同样,如果我从 SuperClass
中删除方法 clone()
,那么 SubClass
将不会显示任何错误。
我理解的差距在哪里?
如果 SuperClass
的 clone
抓住了 CloneNotSupportedException
但没有抛出它, SubClass
就不必抓住它,因为它永远不会被抛出通过 SubClass
的 clone()
.
的 try 块
当您从 SuperClass
中删除 clone()
时,SubClass
现在会调用 Object
的 clone()
,它有一个 throws CloneNotSupportedException
子句。因此,您必须捕获该异常(或向您的方法添加 throws CloneNotSupportedException
)。
在SuperClass
中,当我覆盖clone()
方法时就没有问题了。
public class SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
当我通过完全相同的方式覆盖 SubClass
中的 clone()
方法时(复制和粘贴 clone()
来自 super [=35 的方法=]) 它显示编译错误
public class SubClass extends SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
SubClasss
中包含 catch
的行出现编译错误:
Unreachable catch block for CloneNotSupportedException. This exception is never thrown from the try statement body
同样,如果我从 SuperClass
中删除方法 clone()
,那么 SubClass
将不会显示任何错误。
我理解的差距在哪里?
如果 SuperClass
的 clone
抓住了 CloneNotSupportedException
但没有抛出它, SubClass
就不必抓住它,因为它永远不会被抛出通过 SubClass
的 clone()
.
当您从 SuperClass
中删除 clone()
时,SubClass
现在会调用 Object
的 clone()
,它有一个 throws CloneNotSupportedException
子句。因此,您必须捕获该异常(或向您的方法添加 throws CloneNotSupportedException
)。