Здравствуйте, 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", а реализовать эту связь руками (с дополнительной возможностью поменять экземпляр внешнего класса)
Вот этого то и не хотелось, но раз никак...