Используя Java 8 сейчас для 6+ месяцев или около того, я очень доволен новыми изменениями API. Одна область, в которой я до сих пор не уверен, - это когда использовать Optional. Кажется, я качаюсь между желанием использовать его везде, где что-то может быть null, и нигде вообще.
Кажется, что есть много ситуаций, когда я мог бы использовать его, и я никогда не уверен, добавляет ли он преимущества (читаемость/нулевая безопасность) или просто вызывает дополнительные накладные расходы.
Итак, у меня есть несколько примеров, и меня бы интересовали мысли сообщества о том, является ли Optional полезным.
1 - как открытый тип возвращаемого метода, когда метод может вернуть значение null:
public Optional<Foo> findFoo(String id);
2 - как параметр метода, когда параметр может быть null:
public Foo doSomething(String id, Optional<Bar> barOptional);
3 - как необязательный член компонента:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4 - В Collections:
В общем, я не думаю:
List<Optional<Foo>>
добавляет что-либо - тем более, что можно использовать filter() для удаления null значений и т.д., но есть ли какие-либо хорошие применения для Optional в коллекциях?
Любые случаи, которые я пропустил?