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

119
13 мая 2019, 20:10

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

public class CrimeLab {
    private static CrimeLab sCrimeLab;
    private Context mAppContext;
    public ArrayList<Crime> mCrimes;
    private CrimeLab (Context appContext){
        mAppContext = appContext;
        mCrimes = new ArrayList<Crime>();
    }
    public ArrayList<Crime> 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<Crime> 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 не учитывается, или я сильно не понимаю принцип синглтонов.

Answer 1

s в данном случае является обозначением статической переменной, но название никак не влияет на её суть, оно может быть любым.

Метод get, также является статическим.

В коде написано, что если sCrimeLab является null, то необходимо создать экземпляр класса в ином случае вернётся существующий экземпляр.

По хорошему можно разделить строку mCrimes = CrimeLab.get(getActivity()).getCrimes(); на

CrimeLab crimeLab = CrimeLab.get(getActivity());
mCrimes = crimeLab.getCrimes();
READ ALSO
Тест на javarush.net -застрял

Тест на javarush.net -застрял

Вроде все верно, но что-то не такЗадача на английском закоментирована в коде

149
ResourceMap в java

ResourceMap в java

В интернете не нашел ни описания, ни документации этой функцииЧто она делает? И есть ли другие аналоги ResourceMap? Например, я где то слышал что...

117
Java Set HashSet

Java Set HashSet

Имеется HashSet объектов из них хотелось бы что бы хеш объекта и его уникальность оценивалась только по определённому его полю а не по всему...

140
Класс String и его методы compareTo() и compareToIgnoreCase()

Класс String и его методы compareTo() и compareToIgnoreCase()

Методы compareTo() и compareToIgnoreCase() позволяют сравнивать строки, но они позволяют вычислить насколько одна строка больше другойКак я понял

178