Другой ответ - это, по сути, рефакторинг вашего второго подхода, который сам по себе не имеет ничего плохого, это просто вопрос стиля. Конечно, связывание и извлечение в отдельный метод сделает это намного более читабельным и понятным, без сомнения (+1 от меня), особенно с учетом правильного использования ifPresent
.
Я бы просто добавил здесь, что get
, ну, как-то было воспринято как ошибка проектирования (или может быть неправильным именем метода, возможно, оно пришло из guava
мышления). Использование get
, даже если документально подтверждено, что выдается исключение, когда это значение отсутствует, несколько странно (если вы думаете, что получатели здесь, вы не ожидаете, что getter
сгенерирует исключение). И вы не ожидаете, что get
нужно будет назвать после isPresent
, по крайней мере, не в самых первых взаимодействиях с Optional
. Таким образом, get
было предложено объявить устаревшим (и, будем надеяться, удаленным), поэтому java-10 добавляет лучшее добавление orElseThrow()
- это имеет смысл сразу после того, как вы его прочитаете, потому что бросающая часть находится в названии метода, поэтому нет сюрпризы.
Кроме того, кто-то должен рассказать вам об использовании new Date()
, что при использовании с Optional
из java-8 выглядит странно, уже есть гораздо лучшие классы, связанные с датой и временем.
Я также не очень уверен, почему вы обновляете дату изменения вручную, когда для этого есть весенние аннотации, такие как PreUpdate/PrePersist
.