Каково время жизни неназначенного объекта, созданного в конструкторе в Java? - PullRequest
3 голосов
/ 14 марта 2019

У меня есть класс (A) с конструктором, определенным как показано ниже.В конструкторе я создал объект для B, передав ему реализацию слушателя (интерфейса), как показано ниже.

public class A {

    private String str;

    public A() {

       new B(new OnStringUpdatedListener() {

           public void onStringUpdated(String str) {
               A.this.str = str;
           }

       });
    }
}

В приведенном выше коде объект B не привязан ни к какому полю A или переменной в конструкторе.

Каков срок жизни объекта B? Отмечен ли он для сборки мусора, как только выполнено выполнение конструктора, или он все еще жив, поскольку зарегистрировал прослушиватель, который изменяет поле A.

1 Ответ

4 голосов
/ 14 марта 2019

@ Комментарий Томаса хорош.

Неважно, что OnStringUpdatedListener изменяет. После выполнения конструктора B не будет доступен ни по одной ссылке. Он получит право на сборщик мусора и может быть собранным мусором.

...