可克隆抛出 CloneNotSupportedException
Cloneable throws CloneNotSupportedException
public class test implements Cloneable {
@Override
public test clone() {
return (test) super.clone();
}
public static void main(String[] args) {
new test().clone();
}
}
当我尝试编译它时得到 error: unreported exception CloneNotSupportedException
(在第 4 行,不是主要的)。据我所知,实施 Cloneable
的全部目的是摆脱异常。
- 有没有办法在不抛出或捕获异常的情况下使用
super.clone()
?
- 界面真的有作用吗?
Is there a way to use super.clone() without throwing or catching the exception?
否,因为 Object#clone()
(您使用 super.clone()
调用的方法)声明了它。
Does the interface actually do anything?
是的,但很少:如果你不实现它,Object#clone()
实际上会抛出声明的异常。
您需要处理 CloneNotSupportedException
异常,Class 名称应以大写字母开头。
Is there a way to use super.clone() without throwing or catching the
exception?
如果您不想在 clone
方法中处理异常,那么使用 throws
关键字它会将您的异常传播到被调用的方法。
public class Test implements Cloneable {
@Override
public Test clone() throws CloneNotSupportedException{
return (Test) super.clone();
}
public static void main(String[] args) {
try {
new Test().clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
Does the interface actually do anything?
public interface Cloneable
A class 实现了 Cloneable
接口,以向 Object.clone()
方法指示该方法对 Object.clone()
的实例进行逐字段复制是合法的=27=]。 read more
实施Cloneable(标记接口:无方法)并不意味着摆脱异常。很简单,您是在告诉编译器将来您可以创建实现 class 的对象的克隆。如果您不自动覆盖克隆方法,它将调用 Object class 方法。
- 你必须抛出异常作为重写方法的签名。
- 确定您的对象是否可以被克隆。
如您在 Java 文档中所见:
This interface does not contain the clone method. Therefore, it is not possible to clone an object merely by virtue of the fact that it implements this interface. Even if the clone method is invoked reflectively, there is no guarantee that it will succeed.
如果您不想要此功能,您可以抛出相同的异常!!
public class test implements Cloneable {
@Override
public test clone() {
return (test) super.clone();
}
public static void main(String[] args) {
new test().clone();
}
}
当我尝试编译它时得到 error: unreported exception CloneNotSupportedException
(在第 4 行,不是主要的)。据我所知,实施 Cloneable
的全部目的是摆脱异常。
- 有没有办法在不抛出或捕获异常的情况下使用
super.clone()
? - 界面真的有作用吗?
Is there a way to use super.clone() without throwing or catching the exception?
否,因为 Object#clone()
(您使用 super.clone()
调用的方法)声明了它。
Does the interface actually do anything?
是的,但很少:如果你不实现它,Object#clone()
实际上会抛出声明的异常。
您需要处理 CloneNotSupportedException
异常,Class 名称应以大写字母开头。
Is there a way to use super.clone() without throwing or catching the exception?
如果您不想在 clone
方法中处理异常,那么使用 throws
关键字它会将您的异常传播到被调用的方法。
public class Test implements Cloneable {
@Override
public Test clone() throws CloneNotSupportedException{
return (Test) super.clone();
}
public static void main(String[] args) {
try {
new Test().clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
Does the interface actually do anything?
public interface Cloneable
A class 实现了 Cloneable
接口,以向 Object.clone()
方法指示该方法对 Object.clone()
的实例进行逐字段复制是合法的=27=]。 read more
实施Cloneable(标记接口:无方法)并不意味着摆脱异常。很简单,您是在告诉编译器将来您可以创建实现 class 的对象的克隆。如果您不自动覆盖克隆方法,它将调用 Object class 方法。
- 你必须抛出异常作为重写方法的签名。
- 确定您的对象是否可以被克隆。
如您在 Java 文档中所见:
This interface does not contain the clone method. Therefore, it is not possible to clone an object merely by virtue of the fact that it implements this interface. Even if the clone method is invoked reflectively, there is no guarantee that it will succeed.
如果您不想要此功能,您可以抛出相同的异常!!