Одной из наиболее интересных особенностей Java 8 является введение Optional<T>. Действительно, самой известной ошибкой Java является NullPointerException, настало время избавиться от нее. В этой статье рассматривается, как это сделать сегодня для Android.

Что такое Optional<T> ?

Согласно документации, Optional:

Объект-контейнер, который может содержать или не содержать ненулевое значение. Если значение присутствует, isPresent() вернет true и get() вернет это значение.

Другими словами, вместо переменной, которая может быть нулевой, все обернуто в Optional Object.

Наиболее полезным методом этого класса является ifPresent(Consumer<T> consumer), поскольку он позволяет удалить оператор, который проверяет, не имеет ли переменная значение null перед ее использованием.

Решения, которые можно использовать сегодня

Перенести свой проект в min SDK 24

Одно из решений: вы переведете приложение на minSDK 24, если вы находитесь в ситуации, когда вы можете это сделать, просто сделайте это.

Но в реальной жизни создание приложения, которое может быть установлено на менее чем 8% устройств Android, на самом деле не является хорошим вариантом.

Возможно, вы находитесь в этой ситуации, потому что разрабатываете приложение для Android Things. Это решение дает вам доступ ко всем методам класса Optional.

 

Импортировать библиотеку stream support

В Sourceforge имеется библиотека stream support library. Это решение дает вам доступ к каждому методу Optional, а также ко всему Java 8 API потоков. Это интересно, если вы планируете использовать потоковый API, потому что он добавляет много дополнительных методов в ваш APK, около 7000. Это составляет 10% от разрешенного количества методов для вашего APK и довольно огромно, чтобы использовать только один этот класс.

Чтобы использовать эту библиотеку, подключите ее следующим образом:

implementation “net.sourceforge.streamsupport:streamsupport:1.6.0”

После этого у вас будет доступ к Optional через java8.util.Optional<T> вместо java.util.Optional<T>.

 

Читать ещё :   Видео : Architecture Components: ViewModel

Использовать библиотеку Google Guava

Использовать библиотеку Google Guava довольно интересно, поскольку она уже включена в ваш проект, если вы используете Dagger2, используемую большинством проектов Android.

Эта библиотека довольно огромна, но есть меньшая, называемая Arrow, созданная Fernando Cejas. Эта библиотека содержит только основную часть библиотеки guava. К сожалению, недостатком этой библиотеки является то, что она не содержит всю реализацию Optional и большинство интересных методов, таких как ifPresent, отсутствуют. К тому же эта либа уже 2 года не имеет обновлений.

 

Создать свой собственный Optional class

Когда нет другого пути, лучший способ — сделать это самому. Будьте осторожны, вы не можете просто скопипастить код из API, т.к. класс Optional защищен Oracle Copyright. Поэтому, если вы хотите, чтобы ваша реализация была optional, вы должны сделать это на основе сигнатур методов, а не реализации.

Вот код, обратите внимание, что реализованы только те методы, которые нужны:

Если вы нашли лучшее решение, не стесняйтесь рассказать о нем в комментариях. Всегда хорошо учиться у кого-то другого!

 

Читать ещё :   Руководство по архитектуре приложений. Часть 3