Пусть у меня есть метод библиотеки, как это (очень сокращенный):Что вернуть, когда родовые методы возвращают «ничего», но null не могут быть возвращены?
public static <V> Optional<V> doSomethingWith(Callable<V> callable) {
try {
return Optional.of(callable.call());
} catch (Exception ex) {
// Do something with ex
return Optional.empty();
}
}
И я хочу что-то, что не возвращает значения, как:
Library.</*What1*/>doSomethingWith(() -> {
foo();
return /*what2*/;
});
Мой первый инстинкт родовое метод, который не возвращает значение, делает тип Void
и возвращает null
, однако, поскольку результат обернут в Optional
, это приведет к исключению.
Какие разумные заполнители для /*What1*/
и /*what2*/
, которые не выглядят совершенно случайно, как Integer
и 0
?
Я стараюсь избегать Optional.ofNullable
, потому что здесь используется пустой символ, указывающий, что callable.call()
не прошел нормально.
Не можете ли вы изменить метод библиотеки, чтобы использовать 'Optional.ofNullable'? Какой смысл возвращать необязательный, если он всегда присутствует? –
Метод библиотеки очень сокращен. Он может фактически возвращать 'Optional.empty()' при возникновении условия. –
Вы можете просто добавить локальный класс с разумным именем и вернуть экземпляр этого класса. – glee8e