Во-первых, никогда не оставляйте Optional<T>
поля в состоянии null , поскольку это просто отрицает всю цель использования типа Optional<T>
.
Убедитесь, что они имеютЗначение ненулевое перед тем, как позволить пользователям API получить к нему доступ и выполнять над ним операции, например, private Optional<Float> b;
было бы гораздо лучше объявить как private Optional<Float> b = Optional.empty()
(что на самом деле может решить вашу текущую проблему).
Кроме того, я не фанат использования в качестве параметров метода Optional ( см. Здесь ).
Тот факт, что ваш setB
потребляет Optional<T>
, означает, что любойможно присвоить любое значение полю b
, а это значит, что можно даже сделать setB(null)
, упс ...
Как уже упоминалось, в идеале вам следует избегать использования необязательных в качестве параметров, но если вы хотите сохранить его какЗатем я бы предложил выполнить некоторую проверку, чтобы предотвратить передачу null
методу setB(...)
, так как снова это отрицает цель использования Optional.
Наконец, значение по умолчанию b
beOptional.empty()
а также предотвращение null
, передаваемый методу setB(...)
, означает, что b
никогда не может быть null
, что всегда должно иметь место, чтобы использовать тип Optional<T>
.