Страницы

Поиск по вопросам

четверг, 27 февраля 2020 г.

Как работают синглтоны Java?

#java #android #static


Читая книгу "Программирование под Android" Брайна Харди, я столкнулся со следующим
кодом. Существует класс синглтон:

public class CrimeLab {
    private static CrimeLab sCrimeLab;
    private Context mAppContext;

    public ArrayList mCrimes;

    private CrimeLab (Context appContext){
        mAppContext = appContext;
        mCrimes = new ArrayList();
    }

    public ArrayList getCrimes() {
        return mCrimes;
    }

    public static CrimeLab get(Context c){
        if (sCrimeLab == null){

            sCrimeLab = new CrimeLab (c.getApplicationContext());
        }
        return sCrimeLab;
    }
}


Существует ещё один класс, в котором обращаются к методу get и getCrimes класса CrimeLab:

public class CrimeListFragment extends ListFragment {
    private ArrayList mCrimes;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mCrimes = CrimeLab.get(getActivity()).getCrimes();
    }
}


Меня интересует эта строка кода mCrimes = CrimeLab.get(getActivity()).getCrimes();.
Как мы обращаемся к CrimeLab, если мы не создали экземпляр класса CrimeLab, а статической
является лишь переменная sCrimeLab в CrimeLab? Могу предположить, что приставка s не
учитывается, или я сильно не понимаю принцип синглтонов.
    


Ответы

Ответ 1



s в данном случае является обозначением статической переменной, но название никак не влияет на её суть, оно может быть любым. Метод get, также является статическим. В коде написано, что если sCrimeLab является null, то необходимо создать экземпляр класса в ином случае вернётся существующий экземпляр. По хорошему можно разделить строку mCrimes = CrimeLab.get(getActivity()).getCrimes(); на CrimeLab crimeLab = CrimeLab.get(getActivity()); mCrimes = crimeLab.getCrimes();

Комментариев нет:

Отправить комментарий