Я понял, что Java Optional Ojbect не является Сериализуемым. Я также понял, что основной целью использования дополнительного объекта является метод, возвращаемый типом.
Учитывая следующий метод:
public Phone(){
public Optional<Phone> getPhone(){
// some logic goes here to create a new phone object and then put it in optional...
}
}
В клиентском классе он вызывает указанный выше метод для извлечения необязательного объекта, а затем передает его на запрос, чтобы интерфейсная страница JSP могла использовать этот объект:
Optional<Phone> optionalPhone = (new Phone()).getPhone();
// 1. put Optional object in request/session.
request.setAttribute("optionalPhone ", optionalPhone );
// or 2. put Phone object in request/session.
request.setAttribute("phoneObject", optionalPhone.get());
Вопросы:
Должны ли мы передать необязательный объект в запросе во внешнюю JSP или передать значение необязательного объекта (т. Е. Телефонного объекта)?
Что касается первого варианта, Optional не сериализуем, поэтому он не будет работать в распределенных системах (репликации сеансов и т. Д.). Пожалуйста, поправьте меня, если я ошибаюсь.
Если я передам объект Phone вместо Optional в запрос, означает ли это, что мне нужно будет использовать метод Optional.get ()? Я слышал, что мы всегда должны избегать использования методов isPresent () и get () при использовании Optional.
В случае # 3, лучше ли использовать следующие коды (чтобы избежать использования метода get ())?
//put Phone object in request/session.
request.setAttribute("phoneObject", optionalPhone.orElseGet(Phone::new));