#java
В чём отличие Optionalи OptionalInt, и в каких случаях какой из этих типов лучше применять?
Ответы
Ответ 1
Отличие в том, что при наличии значения Optional.get вернет объект (Integer), а OptionalInt.getAsInt — примитивное значение (int). Соответственно, чтобы избежать лишнего обертывания примитивных значений при работе с int применяется OptionalInt , а при работе с объектами Integer — Optional . Рассмотрим на примере интерфейса с двумя методами: interface Test { int getInt(); Integer getInteger(); } При обработке значений имеет смысл использовать соответствующие классы (на примере Stream API): List list = //получаем список OptionalInt intFirst = list.stream().mapToInt(Test::getInt).findFirst(); Optional integerFirst = list.stream().map(Test::getInteger).findFirst(); Использование IntStream и OptionalInt для поля типа Integer потенциально приведет к NullPointerException. Использование Optional и Stream для int приведет к лишнему обертыванию значений. Необходимость специальных классов обусловлена тем, что в Java примитивные типы не могут использоваться в качестве параметров обобщенных типов. Из за этого классы Stream и Optional не могут быть использованы для работы с примитивными значениями. Использовать вместо примитивов классы-обертки непозволительно из-за затрат производительности на упаковку значений в объекты. Поэтому для часто используемых примитивных типов создан набор специальных классов: IntStream, LongStream, DoubleStream и OptionalInt, OptionalLong, OptionalDouble.
Комментариев нет:
Отправить комментарий