现在已经使用Java 8超过6个月左右,我对新的API更改感到非常满意.我仍然不自信的一个领域是什么时候使用Optional.我似乎想要在任何可能的null地方使用它,而且无处可去.
似乎有很多情况我可以使用它,我不知道它是否增加了好处(可读性/无效安全性)或只是导致额外的开销.
所以,我有一些例子,我对社区是否Optional有益的想法感兴趣.
1 - 当方法可以返回时作为公共方法返回类型null:
public Optional<Foo> findFoo(String id);
Run Code Online (Sandbox Code Playgroud)
2 - 当参数可能是null以下时作为方法参数:
public Foo doSomething(String id, Optional<Bar> barOptional);
Run Code Online (Sandbox Code Playgroud)
3 - 作为bean的可选成员:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
Run Code Online (Sandbox Code Playgroud)
4 - 在Collections:
一般来说,我不认为:
List<Optional<Foo>>
Run Code Online (Sandbox Code Playgroud)
添加任何东西 - 特别是因为可以使用filter()删除null值等,但是Optional在集合中是否有任何好的用途?
我错过了什么案例?
有人可以解释一下Optional我们如何避免NullPointerException吗?
Optional<String> op = someFunc()
if(op.isPresent()) {
op.get();
}
String possibleNull = op.get();
Run Code Online (Sandbox Code Playgroud)
这个代码不是很容易出现NullPointerException吗?如果是这样,那么为什么这个代码更受欢迎
String op = someFunc()
if(op != null) {
op.get();
}
String possibleNull = op;
Run Code Online (Sandbox Code Playgroud)
Optional除了帮助我们了解函数是否实际具有返回值之外,还有什么可能带来的好处
Java 8引入了Optional来处理NPE.在实际应用中,我无法理解问题.
我有方法A.
public void doSomethingA(String para) {
Optional<String> name = Optional.of(para);
if (name.isPresent()) {
//do
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果para = null,它将抛出NPE.
方法B.
public void doSomethingB(String para) {
if (para != null) {
//do
}
}
Run Code Online (Sandbox Code Playgroud)
如果我检查para不为空,A和B之间有什么区别.
Optional的含义在哪里.