2013-03-27 2 views
2

Я пытаюсь получить идентификатор из нескольких фрагментов, которые могут или не могут быть инициализированы с помощьюКак избежать мультипликатор, если нулевые заявления

int i = myFragment.getId();, int j = mySecondFragment.getId();.

Мой вопрос: Есть ли очиститель/лучший способ получения идентификатора каждого действительного фрагмента, кроме

if (myFragment != null) {int i = myFragment.getId();}?

+3

Отметьте этот вопрос: http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java?rq=1 –

+0

Можете ли вы показать код и для чего вы его пытаетесь использовать? Я не могу сказать, какой он лучший способ с такой информацией. – Rarw

+0

В зависимости от того, что вы делаете с идентификатором, вы можете заменить нулевые фрагменты фиктивной реализацией (возможно, одним синглом), которая всегда возвращает недопустимый идентификатор или тот, который не изменяет результат. Предположим, вы хотите добавить все ID. Тогда вы могли бы иметь DummyFragment extends Fragment и getID() {return 0; }. Таким образом, неважно, сколько 0 у вас результат одинаковый. –

ответ

2

Для этого вы можете использовать Google Guava.

Конечно, подобная функциональность может быть реализована вами, но Guava дает некоторые удивительные примеры.

Например, представьте, что аргумент может иметь нулевое значение, назовем его Optional. Идея заключается в том, что вы не можете быстро, если это так, просто не принимайте значения NULL. Или даже, определите для него значение по умолчанию.

public void method(Integer arg){ 
    Optional<Integer> possible = Optional.fromNullable(arg); 
    Integer myNum = possible.get(); // Throws exception if arg is null 
    Integer myNum2 = possible.or(0); // returns 0 if arg is null 
} 

Идея заключается в том, что вы не позволяете обнуляет получить прошли определенный уровень вашего приложения, идеально бы для того, чтобы не получить мимо зрения (или сохранение слоя на обратном пути из БД) ,

Если эта идея реализована на всем протяжении. В основе вашего бизнес-уровня вам не придется беспокоиться о нулях.

Есть много других вещей, которые вы можете сделать с гуавы, если вы решите последовать моему совету, не забудьте сделать большинство из них :)

+0

Это, вероятно, то, что я ищу, но с небольшим количеством проблем переводит его в проблему. Поэтому 'myFragment' является возможным значением« null »здесь, но мне нужен идентификатор из него или 0. Поэтому я предполагаю« Необязательный opFragment = Optional.fromNullable (myFragment); 'будет предотвращать исключение nullPointerException, но как я могу называть' .get(). getId(); 'не выбрасывая одно и то же исключение? – Lee

+0

Вы не используете 'get' в этом случае,' get' либо вернет правильное значение, либо быстро завершится, если null, в этом случае вам нужно использовать 'opFragment.or (0)' –

0

Если это то, что вы много, то вы можете сделать функцию это проверяет вас. Таким образом, вместо того, чтобы печатать

if (myFragment != null) {int i = myFragment.getId();} 

все время, которое вы могли бы сделать что-то вроде

public ID getFragmentId(Fragment myFragment){ 
    if (myFragment != null) { 
     return myFragment.getId(); 
    } else { 
     return someDefaultValue; 
    } 
} 

, а затем просто позвонить

i = getFragmentID(myFragment); 

Избегает много repetetive типизации и сделает ваш код НЕМНОГО яснее.

Смежные вопросы