Согласно журналу изменений библиотеки поддержки и документации класса Fragment (https://developer.android.com/reference/android/support/v4/app/Fragment.html), теперь есть новые методы, такие как requreActivity () и requireContext ().
Какова цель этих методов по сравнению с getActivity () и getContext (), поскольку они все еще могут генерировать исключения IllegalStateExceptions? Предпочтительнее ли это возвращать null, если действие или контекст не могут быть найдены? И я должен просто заменить каждый getActivity () на requireActivity ()?
По сути, это метод, который всегда возвращает ненулевой объект или генерирует исключение. Это все.
Из документов:
Теперь у фрагментов есть методы requireContext (), requireActivity (), requireHost () и requireFragmentManager (), которые возвращают объект NonNull эквивалентных методов get или генерируют исключение IllegalStateException.
https://developer.android.com/topic/libraries/support-library/revisions.html#27-1-0
Этот вопрос SO также ссылается на причины этого:
«Методы getActivity и getContext возвращают типы, допускающие значение NULL, потому что, когда Fragment не прикреплен к Activity, эти методы уже вернули значение NULL. В поведении нет никаких изменений, он просто явно отмечен, так что вы можете безопасно обрабатывать его».
https://stackoverflow.com/a/47253335/3268303
Из Reddit:
"Я обновился с поддержки v26 до поддержки v27, и мне пришлось добавить кучу !! s в методы активности / контекста во фрагментах, где я, очевидно, не ожидаю, что это будет null. Приятно иметь методы require *, которые делают это за меня без уродливых !! s. "
https://www.reddit.com/r/androiddev/comments/80ork8/support_library_2710_has_been_released/duxp75h/
Это в основном для пользователей Kotlin, чтобы разрешить получение ненулевой ссылки (если, конечно, она не вызывается в неподходящий момент)
@Smile вся цель - вызвать исключение. если вы этого не хотите, просто используйте getContext и самостоятельно обработайте нулевой регистр.
Итак, если бы я использовал этот метод
requireContext(), нужно ли было бы обернуть его пробной ловушкой? или обрабатывает исключение самостоятельно.