Как собрать / очистить поля экземпляра-держателя инициализации по требованию?

Хорошо, поэтому я пытаюсь сохранить одноэлементный экземпляр GetItemQuery, который является POJO для хранения полей запросов и ответов, необходимых для вызовов Retrofit API. Мне не нужно создавать новый GetItemQuery каждый раз, когда я звоню, поэтому я использую одноэлементный шаблон для установки полей существующего экземпляра GetItemQuery.

public class GetItemQuery {

    // request data
    private String itemId;
    private int numberToLoad;
    // response data
    private Item item;

    private static class Loader {
        static final GetItemQuery sInstance = new GetItemQuery();
    }

    public static GetItemQuery getInstance(Item item) {
        GetItemQuery instance = Loader.sInstance;
        instance.setItem(item);
        return instance;
    }

    public Item getItem() {
        if (item == null) {
            item = new Item();
        }
        return item;
    }

    public void setItem(Item item) {
        this.item = item;
    }    

     // other getters and setters
 }

в моем приложении для Android. В каких случаях мне следует беспокоиться о том, что getInstance() будет обработан сборщиком мусора, поэтому все поля будут очищены? Или есть способ вручную собрать мусор, чтобы убедиться, что некоторые поля неожиданно не станут нулевыми?

Похоже, это дубликат этого вопроса: stackoverflow.com/questions/4127458/…

Gerik 12.04.2018 08:56

1.) Он никогда не будет сборщиком мусора, пока есть ссылка на объект. Статические ссылки - это ссылки. Другими словами: не будет сборщика мусора, пока ваше приложение не перестанет работать. 2.) При использовании синглтонов (решение, которое вы не должны принимать просто так), пожалуйста, используйте реализацию enum. Это лучший способ сделать синглтон на Java. Сравните здесь.

Ben 12.04.2018 08:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
24
1

Ответы 1

Как описано в этом ответе:

Когда сборщик мусора сотрет экземпляр объекта, использующего шаблон Singleton?

Сборщик мусора не будет, потому что есть статическая ссылка

Связанный вопрос является дубликатом этого. Вы, вероятно, должны были отметить это как таковое, просто вставив ссылку в качестве ответа.

Ben 12.04.2018 08:59

Другие вопросы по теме