Re[3]: Клонирование внутренних классов
От: Oval  
Дата: 19.08.04 07:18
Оценка:
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, _zer0, Вы писали:


_>>Здравствуйте, Oval, Вы писали:


O>>>При клонировании объекта внешнего класса, если он содержит объекты внутренних классов эти объекты при клонировании ссылаются на старого предка внешнего класса.


D>Не совсем понятна фраза "он содержит объекты внутренних классов ". Экземпляр внешнего класса ничего не знает о своих внутренних экземплярах (если, конечно, их не региситрировать явно руками). Тут связь однонаправленная -- от внутреннего к внешнему.


Вот сласс



class Outer
{

Inner inner;

 Outer()
 {
   inner = new Inner();
 }


class Inner
{

}
}


Он содержит объект внутренего класса и все о нем знает.(Может его создать присвоить изменить)



O>>>Как сделать чтобы они ссылались на вновь созданный объект внешнего класса?


_>>у внешнего класса перекрываешь clone()


_>>а внутри клонируешь внутренний и переприсваеваешь необходимые ссылки руками, что-то типа


_>>
_>>public Object clone() throws CloneNotSupportedException {
_>>  Parent result = (Parent) super.clone();
_>>  Child child = result.child.clone();
_>>  child.parent = result;
_>>  return result;
_>>}
_>>


D>Экземпляр внутреннего класса не может поменять ссылку на свой внешний экземпляр. Полагаю, что в данном случае, наверное, придется отказаться от отношения между классами "inner-outer", а реализовать эту связь руками (с дополнительной возможностью поменять экземпляр внешнего класса)


Вот этого то и не хотелось, но раз никак...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.