Skip to content

RussianYankee/object_cloner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Бывают в жизни моменты, когда хочется взять и сделать полную копию какого-нибудь объекта.

Как-то так:

ComplexObject obj = ...
ComplexObject copy = CopyUtils.deepCopy(obj);

Проблема в том, что классы в Java бывают произвольной сложности - количество полей класса и их типы никак не регламентированы. Более того, система типов в Java замкнута - элементами массива/списка могут являться абсолютно любые типы данных, в том числе и массивы/списки. А ещё рекурсивные структуры данных - когда объект где-то в своих дебрях содержит ссылку на себя самого. Или на свою часть.

Вам необходимо написать метод deepCopy(), который учитывает все эти нюансы и работает на объектах произвольной структуры и размера.

Немного деталей:

  • Работать метод должен в первую очередь правильно, а уже потом быстро.
  • Использовать можно только возможности стандартной библиотеки J2SE
  • Писать нужно на Java (версия 11 и выше) или Kotlin.
  • В задании должен быть рабочий метод main(), это должно быть готовое приложение, а не просто библиотека
  • Сделанное задание необходимо разместить на GitHub

P.S. Я знаю про хаки с java.io.Serializable и java.lang.Cloneable, пожалуйста, давайте без них


Перед отправкой рекомендую проверить решение вот на таком классе:

class Man {
	private String name;
	private int age;
	private List<String> favoriteBooks;

	public Man(String name, int age, List<String> favoriteBooks) {
		this.name = name;
		this.age = age;
		this.favoriteBooks = favoriteBooks;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public List<String> getFavoriteBooks() {
		return favoriteBooks;
	}

	public void setFavoriteBooks(List<String> favoriteBooks) {
		this.favoriteBooks = favoriteBooks;
	}
	
}

About

object cloning test

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages