Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CloneExample {
- public static void main(String[] args) {
- Cat cat = new Cat("Вася", 2);
- Cat cat1 = new Cat("Мурка", 2);
- cat1.setPair(cat.clone()); // Мурка в паре с Васей
- cat.setPair(cat1); // Вася в паре с Муркой
- Cat cat2 = cat.clone(); // копия Васи
- cat.incAge(); // оригинал Васи постарел
- cat/*.getPair()*/.clear(); // оригинал Васи одинок
- System.out.println(cat); // оригинал Васи
- System.out.println(cat2); // копия Васи
- }
- }
- class Cat implements Cloneable {
- private final String name; // неизменяемый
- private Integer age; // неизменяемый
- private Cat pair; // изменяемый
- public Cat(String name, Integer age) {
- this.name = name;
- this.age = age;
- }
- public void incAge() {
- age++;
- }
- public void setPair(Cat cat) {
- pair = cat;
- }
- public void clear() {
- pair = null;
- }
- @Override
- public Cat clone() {
- try {
- Cat clone = (Cat) super.clone();
- // TODO: copy mutable state here, so the clone can't change the internals of the original
- if (pair != null) clone.pair = pair.clone();
- return clone;
- } catch (CloneNotSupportedException e) {
- throw new AssertionError();
- }
- }
- @Override
- public String toString() {
- return "Cat{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", pair=" + pair +
- '}';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement