使用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 - 作为bean的可选成员:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4 - 在 Collections
中:
总的来说,我认为:
List<Optional<Foo>>
虽然可以使用filter()
来删除null
值等,但是否有任何在集合中使用Optional
的好用途?
我是否遗漏了任何情况?
Map<Character, String>
。如果没有替换,我可以使用这个:Optional.ofNullable(map.get(c)).orElse(String.valueOf(c))
。还要注意的是,Optional是从Guava中偷来的,它有一个更好的语法:Optional.fromNullable(map.get(c)).or(String.valueOf(c));
。 - fge.filter(Optional::absent)
将“空值”过滤掉。 - fge