#java #android #static
Читая книгу "Программирование под Android" Брайна Харди, я столкнулся со следующим кодом. Существует класс синглтон: public class CrimeLab { private static CrimeLab sCrimeLab; private Context mAppContext; public ArrayListmCrimes; 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();
Комментариев нет:
Отправить комментарий