Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как правельно создать копию обекта?


Автор: unkis 1.5.2006, 17:14
Ребята я что-то ничего не понимаю.

как создать правельно копию обекта чтобы потом можно было отдельно друг от друга работать над ними?

предположем есть небольшой кусок кода
Код


A a = new A();
A b = new A();

a = b;




и теперь если мы будем производить какие-то действия над "b", то вместе с ним почему-то будет меняться и a.

это так или я что-то путаю?

и если это так то как правильно создать копию обекта?


Зарания благодарен.


   

Автор: unkis 1.5.2006, 17:45
Не ужели такой глупый вопрос что на него лень ответит?  

Автор: Enflout 1.5.2006, 17:55
Привет.
1. Твой код работать не будет. Типы разные. Вернее было написать
Код

A a = new A();
A b = new A();
a = b;

2. 
Код
A abc = A.class.newInstance();

За дальнейшим отсылаю к Эккелю.
СУВ  

Автор: unkis 1.5.2006, 18:02
Цитата(Enflout @ 1.5.2006,  17:55)
Привет.
1. Твой код работать не будет. Типы разные. Вернее было написать
Код

A a = new A();
A b = new A();
a = b;

2. 
Код
A abc = A.class.newInstance();

За дальнейшим отсылаю к Эккелю.
СУВ

по повду первого согласен ошибся.

а вот по поводу второго я не совсем понял.
можешь по подробней обЪяснить.

у меня есть книга Эккеля(рус),  скажи где искать.


Зарания благодарен. 

Автор: Enflout 1.5.2006, 18:10
Упс... Кажется это не то, что тебе нужно. Виноват smile  

Автор: unkis 1.5.2006, 18:26
http://dmitry.ints.net/library/prog/link/Java/Java/AppendixA.html
вот помоему то что надо, сейчас буду пробывать.

Добавлено @ 18:35 
вмоём случаи это не помогает, ищу дальше 

Автор: powerOn 1.5.2006, 18:44
Если ты хочешь получать копии объектов собственного класса, то намой взгяд нужно в этом классе создать метод, который бы возвращал копию себя, например:

Код

class A {

private int i = 0;

public int getI() {
    return i;
}
public void setI(int _i) {
     i = _i;
}

public A clone() {
       A a = new A();
       a.setI(i);
       return a;
} 

}
  

здесь метод clone() - возвращает клон объекта. У тебя есть метод, значит Ты можешь сам управлять созданием копий.
 

Автор: unkis 1.5.2006, 18:58
нет всё таки работает.

надо через Object.clone(); клонировать. 

Автор: powerOn 1.5.2006, 20:31
Цитата

надо через Object.clone(); клонировать.  


А это как? Вроде метод то protected...  

Автор: LSD 1.5.2006, 22:13
В простейшем случае это будет выглядеть так:
Код
public class MyClass implements Cloneable
...
  public Object clone()
  {
    try
    {
      return super.clone();
    }
    catch(CloneNotSupportedException e)
    {
      return null;
    }
  }
}

Это будет поверхностное клонирование, подробнее у Эккеля: http://iais.kemsu.ru/odocs/java/AppendixA.html#Heading602. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)