@vi0

Правильно ли использовать Optional только для его map?

Как вы считаете, канонично ли использовать Optional только с целью задействоать map от него?
Чтобы избежать промежуточной переменной, чтобы можно было использовать в тернарном операторе "?"

Например вместо:
var something = getSomething();
var a = new Class1(something, something, something);

Использовать:
var a = Optional.of(getSomething())
             .map(it -> new Class1(it, it, it)).get();
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
0. Тернарного оператора что-то я тут не вижу.
1. Ничего не мешает вам сделать промежуточную переменную it, если уж у вас такая сильная тоска по острову в Балтийском заливе:
var it = getSomething();
var a = new Class1(it, it, it);

2. Optional.of - это какой-то исчезающе редкий, вымирающий вид. В нем нет никакого смысла. Используется только Optional.ofNullable.
а. Конструкция Optional позволяет эффективно бороться с нуллабельными объектами, подразумевая что есть Объект и возможная альтернатива в виде нула.
б. Если у вас железно, гарантированно объект "non-null", то и Optional не нужен и вообще не понятно, какая у него вторая альтернатива
3. Неправильно использовать .get() без проверки на null у Optional. Это вывод из п2, вообще-то. Вроде в вашем примере Optional от ненулабельного значения, но смысл это теряет на этапе Optinal.of.
4. В итоге Optional следует использовать как-то так:
var a = Optional.ofNullable(getSomething())
             .map(it -> new Class1(it, it, it))
             .orElseGet(() -> {
                    // TODO :: implement me
                });

Если getSomething железно отдает non-null объект, то вариант 1 будет лучше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы