相关疑难解决方法(0)

用于可选

现在已经使用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在集合中是否有任何好的用途?

我错过了什么案例?

java optional java-8

242
推荐指数
7
解决办法
8万
查看次数

Java 8可选.为什么和ofNullable?

我有一个关于Java 8的Optional的问题,其目的是解决NullPointerException异常问题.

问题是,让两种类型让我们选择的原因是什么:

Optional.of(T value)     <-----non-null value, null value will throw NPE
Optional.ofNullable(T value)   <----- nullable value
Run Code Online (Sandbox Code Playgroud)

因为我的期望是,当我使用时:

Optional.of(nullValue);
Run Code Online (Sandbox Code Playgroud)

它不会抛出一个NullPointerException.


一些回复后扩大了我的问题:

为什么人们会选择Optional而不是普通if-else的null检查?

java optional java-8

16
推荐指数
5
解决办法
2611
查看次数

Optional.of(null)会抛出NPE,我需要在调用方法之前验证null吗?

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的含义在哪里.

optional java-8

12
推荐指数
1
解决办法
4502
查看次数

是否有使用Optional.of()的真正原因?

我在这里读到为什么Optional.of()要使用它Optional.ofNullable(),但答案根本不能满足我,所以我要求略有不同:

如果您确定您的方法没有返回null,为什么要使用它Optional?据我所知,它或多或少的唯一目的是提醒"方法的用户",他可能不得不处理 - 值null.如果他不必处理价值,null他为什么要被一个人打扰Optional呢?

我问,因为我最近使我的服务层返回Optionals而不是nulls(在某些情况下).当我Optional.of()抛出NullPointer时,我使用并且非常困惑.

我做的一个样本:

Optional valueFromDB = getUserById("12");
User user = valueFromDB.get(); 

.....

public Optional<User> getUserById(String id) {
  //...
  return Optional.of(userRepository.findOne(id)); // NullPointerException!
}
Run Code Online (Sandbox Code Playgroud)

如果无法使用null,我不明白为什么会把它包装成一个Optional.链接答案中的家伙说:"好吧,如果NullPointer发生,它会马上发生!" 但我真的想要吗?如果一个人的唯一目的Optional是提醒那些得到这样一个对象的程序员,请null记住(他有必要打开它),为什么我想要NullPointerException在包装时?


编辑:我需要编辑问题,因为它被标记为重复,即使我已经从一开始就链接了所述问题.我也解释过,为什么答案不能让我满意,但现在我需要用一个解释来编辑我的文字.但是这里有一些我想问的附录,因为我得到了5个答案,每个人都回答了不同的案例,但没有一个完全覆盖我在这里要求的内容:

有没有理由,Optional.of(null)是不可能的,他们专门为null case添加了Optional.ofNullable()?

使用流不应该是我对实现的想法的问题.我从你的答案中得到了很多见解,谢谢你.但到目前为止,真正的问题还没有得到解答,据我所知/读/理解.也许我应该问:"如果我们删除该Optional.of()方法并且仅允许Optional.ofNullable()在Java 9中,除了向后兼容性之外会有什么问题吗?"

java nullpointerexception optional java-8

10
推荐指数
3
解决办法
4855
查看次数

为什么我们可以在Optional.of()上调用.orElse()?

我很好奇为什么有可能这样做(至少在Java 8上如此):

Optional.of(null).orElse("something");
Run Code Online (Sandbox Code Playgroud)

Optional.of(null)基本上是保证的空指针。使得对其进行调用.orElse()成为可能,使笨拙的开发人员意外陷入困境。我一直在四处看看是否有任何理由。也许在某些情况下这应该解决?

java optional java-8

2
推荐指数
2
解决办法
203
查看次数

为什么Java的Optional.of()不接受空值?然后,它不再是真正的“可选”值

我知道Optional.ofNullable()值是否也可以为null。我的问题是,为什么还没有默认行为Optional.of()呢?如果值不能是null,为什么要放在Optional第一个?如果结果还是为空,那么无论如何您都会得到一个NPE。如果您Optional使用of()方法构造一个,那么您仍然会拥有Optional包装器的所有其他方法,只有在值可以为的情况下,它们才真正有目的null

编辑:我已经阅读了为什么在Optional.ofNullable上使用Optional.of?在发布此消息之前,但答案是“因为您可以更快地发现错误,并且以这种方式进行跟踪更容易”。但是我有点不同意,也许您的堆栈跟踪中会包含一些额外的行,但是仍然很容易查明NPE的来源。

java optional java-8

0
推荐指数
1
解决办法
79
查看次数

标签 统计

java-8 ×6

optional ×6

java ×5

nullpointerexception ×1