Документация Java гласит:
Класс реализует интерфейс Cloneable для указания методу Object.clone (), что для этого метода допустимо делать копию поля для поляэкземпляры этого класса.
Вызов метода клона Object в экземпляре, который не реализует интерфейс Cloneable, приводит к исключению CloneNotSupportedException.
По соглашению классы, реализующие этот интерфейс, должны переопределять Object.clone (который защищен) публичным методом.См. Object.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Интерфейс не работает, но я не знаю, что это значит.Я что-то упустил?