Пример кода:разрушения объекта, когда дочерний объект ссылается на родительский объект
public class Parent{
public void someMethod(){
//start of some sort of loop
Child child = new Child(this);
//do something
//replaces reference from old child to new child
child = new Child(this);
//repeats loop
}
}
public class Child{
Parent parent;
public Child(Parent parent){
this.parent = parent;
}
}
Из того, что я понимаю из жизненного цикла объекта, если объект не должны были быть больше не ссылается, то он будет иметь право на дс, например, когда ссылка на ребенка была изменена для ссылки на новый второй дочерний объект.
Но что, если каждый объект Child имеет ссылку на объект, который его создал, как и выше, будет ли он иметь право на gc в этом случае, если он больше не ссылается на его родительский объект?
Если нет, как я могу написать это так, чтобы это было?
О да, я сделал опечатку с этим новым родителем(), я отредактировал. Но как бы удалить ссылку на родительский экземпляр из дочернего класса? должен ли я сделать метод removeParent, и внутри он помещает родительскую ссылку в null? – Imp
В приведенном выше примере родитель не имеет ссылки на Child; одна переменная children является локальной переменной внутри метода someMethod(). – Marco
@Nonexistent Если у вас есть ссылка на экземпляр Child, и у вас есть метод в классе Child, который обнуляет ссылку Parent, вы можете очистить эту ссылку. Но если у вас нет ссылки на экземпляр Child, вы не сможете этого сделать. – Eran