Java 8 Как вернуться из метода, если Optional нет? - PullRequest
2 голосов
/ 28 марта 2019

Я не имею в виду вернуть необязательное значение, я имею в виду для метода:

public void someMethod() {
    Optional<Obj> obj = someService.getObj();
    if (obj.isPresent()) {
         ....
    } else {
       log.info(xxxx);
       return;
    }
    xxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxx
    other codes
}

Можно ли написать его с помощью Optional.ifPresent?Я имею в виду, избегайте использования вещи if isPresent.

Большое спасибо.

== updated:

кажется, что если это может сделать PreresentOrElse в JDK9, но есть ли способчтобы сделать это в JAVA8?

Мне не нужно, чтобы этот метод возвращал какое-либо значение, но если Optional не присутствует, я хочу что-то записать.

Ответы [ 3 ]

5 голосов
/ 28 марта 2019

Похоже на случай использования ifPresentOrElse, как в Java-9:

obj.ifPresentOrElse(a -> {...}, () -> {logger.info(xxxx);return; });
2 голосов
/ 28 марта 2019

Если вы не хотите ничего делать, когда Optional пусто, вы можете использовать ifPresent:

public void someMethod() {
    someService.getObj().ifPresent (v -> {
         ....
    });   
}
0 голосов
/ 28 марта 2019

Просто добавьте идею, а как насчет метода в сервисе, чтобы проверить, присутствует ли объект?Я думаю, что, как правило, вы не хотите распространять свои дополнительные компоненты по всему коду, я бы предпочел оставить их внутри службы.

Вкл. SomeService:

public boolean isObjectPresent() {
    return getObj().isPresent();
}

Тогда

public void someMethod() {
    if (someService.isObjectPresent()) {
         ....
    } else {
       log.info(xxxx);
       return;
    }
}

Таким образом, вам не нужно иметь дело с Optional в вашем вызове, так как вас не волнует его значение

ПРИМЕЧАНИЕ. Также добавлючто если у вас нет кода после блоков if, вам не нужен оператор return.

...