【发布时间】:2020-01-25 22:02:42
【问题描述】:
How to clone a Java object with the clone() method
我有一个关于在 java 中为类正确实现 clone() 方法的问题。
我知道这是不好的做法,但我需要在考试中知道这一点。
在上面的讨论中,他们说要调用super.clone() - 但我不明白如果超级函数没有实现 Clonable 会发生什么。
例如,假设我有一个扩展 Y 的类 X。X 实现了 Clonable 而 Y 没有。 Y 的clone() 方法应该抛出异常。那么在这种情况下我们该怎么办呢?
我能找到的所有解释都假设所有超类都实现了 Clonable,或者至少我是这么理解的..
编辑:
请查看此代码:
public class Employee implements Cloneable {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Object clone()throws CloneNotSupportedException{
return (Employee)super.clone();
}
public static void main(String[] args) {
Employee emp = new Employee("Abhi");
try {
Employee emp2 = (Employee) emp.clone();
System.out.println(emp2.getName());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
取自这里:https://www.javacodegeeks.com/2018/03/understanding-cloneable-interface-in-java.html
在许多教程中都可以找到类似的代码。
当超类(在本例中为 Object)未实现 Clonable 时,为什么他们可以使用 super.clone() - 这会导致异常。
【问题讨论】:
-
如果 'superclass is not Clonable' 意味着超类没有实现 'Clonable' 接口 - 将没有 super.clone() 方法,因此您将无法调用它。那么问题是什么?
-
那么在这种情况下我该如何克隆呢?如何覆盖 clone() 方法?
-
@AlexChernyshev 将是一个
super.clone(),因为它是在Object上声明的;如果对象确实实现了Clonable,它就不会起作用 -
@AlexChernyshev
clone()is a method ofObject。因此,Java 中的每个对象都有一个clone()-方法(不仅仅是有问题的行为)。 -
@Turing85 很多人认为“Java 已损坏”,所以呢?让我们留在话题上。