OptionalInt作为输入参数

use*_*932 2 java optional java-8

我读了为什么Java 8的Optional不能用在参数中.但是Optional(Int|Long|Double),有什么理由反对使用它们作为输入参数?

正如我所理解的那样,它们不能是空的,而是null(Optional<X>输入参数中的主要参数参数),但可能还有其他的珊瑚礁?我应该使用OptionalIntInteger使用null而不是null重视?

Ous*_* D. 10

这种不使用Optionals作为方法参数的想法不仅仅适用于Optional<T>所有类型的Optionals.

当你说:

正如我所理解的那样,它们不能为空,但是为null(Optional<X>输入参数中的主参数参数)

首先,让我们只是让术语正确,当一个Optional<X>包含非空引用时,我们说它存在,否则我们说它Optional<X>空的不存在.你不应该说Optional<X>包含null.

无论是类型对象T还是基本类型的容器,所有Optionals都可以为空.

例如,如果您查看OptionalInt类文档,它会说:

容器对象,可能包含也可能不包含int值.如果存在值,则isPresent()将返回true,并且getAsInt()将返回该值.

强调我的.

当Optional不包含int值时,它是一个空的Optional.

我应该使用OptionalInt或Integer null和非null值吗?

至于使用OptionalInt还是Integer真的取决于你的用例.

  • 与所有可选的类型T和原始类型的容器一样,它们是描述性的,并且允许应用不同类型的操作来提取值(如果存在)或者如果不存在则执行其他操作.
  • Integer可以为任何字段赋值null.
  • 可以null在具有Integer返回类型的任何方法中返回.
  • OptionalInt字段(有争议的)永远不应该被认为null是因为它首先违背了使用Optional的整个目的.
  • 永远不应该再返回null任何具有返回类型的方法,OptionalInt因为它首先破坏了使用Optional的整个目的.

等等..

此外,一些人居然不鼓励使用原始选配的,只是因为他们缺乏map,flatMapfilter方法.

从本质上讲,没有规则总是使用Optionals或者反向,而是选择最适合您需求的API.

  • @ user1244932"`Optional <X>`可以是`isPresent`但是null" - 不,它不能."Optional"的值(如果存在)是非null.请参阅[javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html) - "容器对象,可能包含也可能不包含**非null**价值." (7认同)
  • ......并且他们没有"null",即使通过了那个.它们是空的,如果你试图获得价值,它会爆炸 (2认同)