2014-09-25 2 views
1

Я хочу скопировать объект в java без копирования ссылки.Как создать/скопировать объект в Java быстрее?

Object o1 = new Object(); 
Object o2 = o1; 

Но o2 не следует копировать ссылку o1. Поэтому любые изменения, сделанные в o2, не должны влиять на o1.

Как мы это делаем в java?

+0

Метод clone() специфичен для класса Object. Если мне нужно скопировать объект какого-то определенного класса, я думаю, что клон не будет работать. – Setu

+1

@Setu, как указано другими ниже, вам необходимо переопределить метод clone для определенных классов. – munyul

ответ

2

Вы можете использовать Object.clone() метод клонирования объекта:

Object o2 = o1.clone(); 
4

Вы можете переопределить clone() метод, который будет создавать копию всего объекта графа (глубокую копию) и создать новый объект.

Примечание: каждый класс наследует значение по умолчанию clone() от Object. Но вы должны переопределить метод для выполнения копирования в зависимости от содержимого вашего объекта.

Просто FYI:

по умолчанию Object.clone() представляет собой неполную копию. Тем не менее, это , предназначенный для создания исключения CloneNotSupportedException, если только ваш объект не выполняет клонирование.

И когда вы реализуете Cloneable, вы должны переопределить clone(), чтобы сделать , он делает глубокую копию, вызывая clone() по всем полям, которые являются самими клонированными.

0

Вы должны использовать Cloning, то у вас есть копия Object

Object obj2=obj.clone(); // clone() in Object class has protected modifier 

Тогда вы должны переопределить метод клонирования в своем классе.

Клон?

Создает и возвращает копию этого объекта. Точный смысл «копия» может зависеть от класса объекта. Общая цель заключается , что для любого объекта х, выражение:

1

Если вам необходимо скопировать другие классы, чем объект, сделать конструктор копирования или статический метод фабрики. Эффект-то вроде этого:

MyClass o1 = new MyClass(); 
MyClass o2 = new MyClass(o1); // in constructor make new object with data from o1 attributes 

или

MyClass o1 = new MyClass(); 
MyClass o2 = MyClass.makeCopy(o1); // make static method for create new copy (similar like above) 

Не используйте клон. ->Effective Java

Смежные вопросы