Java 文档说:
一个类实现了 Cloneable 接口,以向 Object.clone() 方法指示该方法可以合法地对该类的实例进行逐个字段的复制。
在未实现 Cloneable 接口的实例上调用 Object 的 clone 方法会导致抛出异常 CloneNotSupportedException。
按照惯例,实现此接口的类应使用公共方法覆盖 Object.clone(受保护的)。有关覆盖此方法的详细信息,请参阅 Object.clone()。
请注意,此接口不包含 clone 方法。因此,不可能仅凭借实现该接口的事实来克隆对象。即使以反射方式调用 clone 方法,也不能保证它会成功。
我有这UserProfile
堂课:
public class UserProfile implements Cloneable {
private String name;
private int ssn;
private String address;
public UserProfile(String name, int ssn, String address) {
this.name = name;
this.ssn = ssn;
this.address = address;
}
public UserProfile(UserProfile user) {
this.name = user.getName();
this.ssn = user.getSSN();
this.address = user.getAddress();
}
// get methods here...
@Override
public UserProfile clone() {
return new UserProfile(this);
}
}
为了测试 porpuses,我这样做main()
:
UserProfile up1 = new UserProfile("User", 123, "Street");
UserProfile up2 = up1.clone();
到目前为止,编译/运行没有问题。现在,根据我对文档的理解,implements Cloneable
从UserProfile
类中删除应该会在调用中引发异常up1.clone()
,但事实并非如此。
我在这里读到 Cloneable 接口坏了,但我真的不知道这意味着什么。我错过了什么吗?