Java Optional.ofNullable和Optional.fromNullable有什么区别

Java Optional.ofNullable和Optional.fromNullable有什么区别,java,Java,我正在开发一个java应用程序,我发现有两个选项: 一个是本地的jdk Optional.ofNullable,另一个是来自guava库的Optional.fromNullable 简单来说,它们的意思是一样的吗?在非java8应用程序中使用fromNullable等同于ofNullabe吗 阅读我找到的文件: vs 可能包含对另一个对象的非空引用的不可变对象。此类型的每个实例要么包含一个非空引用,要么不包含任何内容(在这种情况下,我们称该引用为“缺席”);它从未被称为“包含空值”。 非nu

我正在开发一个java应用程序,我发现有两个选项:

一个是本地的jdk Optional.ofNullable,另一个是来自guava库的Optional.fromNullable

简单来说,它们的意思是一样的吗?在非java8应用程序中使用fromNullable等同于ofNullabe吗

阅读我找到的文件:

vs

可能包含对另一个对象的非空引用的不可变对象。此类型的每个实例要么包含一个非空引用,要么不包含任何内容(在这种情况下,我们称该引用为“缺席”);它从未被称为“包含空值”。
非null可选引用可以用作可为null的T引用的替换。它允许您将“必须存在的T”和“可能不存在的T”表示为程序中的两种不同类型,这有助于清晰。
这个类的一些用法包括
作为方法返回类型,作为返回null以指示没有可用值的替代方法
区分“未知”(例如,不存在于映射中)和“已知无值”(存在于映射中,值可选。缺席())
在不支持null的集合中包装存储的可为null的引用(尽管有几种其他方法应该首先考虑)
使用此类的常见替代方法是为所讨论的类型查找或创建合适的null对象。
这个类并不打算直接模拟其他编程环境中任何现有的“选项”或“可能”构造,尽管它可能有一些相似之处。
与java.util.Optional(JDK 8及更高版本)的比较:为java 8添加了一个新的可选类。这两个类非常相似,但不兼容(它们不能共享一个公共超类型)。此处列出了所有已知差异,或使用以下相关方法列出。
在讨论空值处理时,是否可以将两者视为“相同”呢

当谈到空值时,是否可以将两者视为“相同”呢 处理

是的,正如文件所述,它们是等效的:

公共静态可选fromNullable(@Nullable
T可空引用)
如果nullableReference为非null,则返回可选实例 载有该提述;否则返回缺席()与比较 可选:此方法相当于java 8的 可选。不可用。

当谈到空值时,是否可以将两者视为“相同”呢 处理

是的,正如文件所述,它们是等效的:

公共静态可选fromNullable(@Nullable
T可空引用)
如果nullableReference为非null,则返回可选实例 载有该提述;否则返回缺席()与比较 可选:此方法相当于java 8的 可选。不可用。


摘自番石榴汁:

与java.util.Optional(JDK 8及更高版本)的比较:

为Java8添加了一个新的可选类。这两个类非常相似,但不兼容(它们不能共享一个公共超类型)。此处列出了所有已知差异,或使用以下相关方法列出

  • 这个类是可序列化的;java.util.Optional不是可选的
  • 可选的还有其他方法ifPresent、filter、flatMap和orelsetrow
  • java.util提供了Optionant、OptionalLong和OptionalDouble的基本专用版本,建议使用这些版本;番石榴没有这些
在可预见的将来,没有计划不推荐此类课程。但是,我们建议您尽可能地使用新的标准Java类

请参阅《Guava用户指南》中关于使用可选项的文章


换句话说,这些方法是等价的,类和实例则不是。

摘自guava文档:

与java.util.Optional(JDK 8及更高版本)的比较:

为Java8添加了一个新的可选类。这两个类非常相似,但不兼容(它们不能共享一个公共超类型)。此处列出了所有已知差异,或使用以下相关方法列出

  • 这个类是可序列化的;java.util.Optional不是可选的
  • 可选的还有其他方法ifPresent、filter、flatMap和orelsetrow
  • java.util提供了Optionant、OptionalLong和OptionalDouble的基本专用版本,建议使用这些版本;番石榴没有这些
在可预见的将来,没有计划不推荐此类课程。但是,我们建议您尽可能地使用新的标准Java类

请参阅《Guava用户指南》中关于使用可选项的文章


换句话说,这些方法是等价的,而类和实例则不是。

哇,你在问一个问题,然后粘贴到javadoc中,引导你找到答案。也许你应该阅读粘贴到问题中的javadoc!!!!!!粘贴的javadoc的最后一行开始“Comparison to
java.util.Optional
…”javadoc已经完成了您要求的比较。我确实读过,正如我提到的,我不清楚:)哇,你在问一个问题,然后你粘贴了javadoc,引导你找到答案。也许你应该阅读粘贴到问题中的javadoc!!!!!!粘贴的javadoc的最后一行开始“Comparison to
java.util.Optional
…”javadoc已经完成了您要求的比较。我确实读过,正如我提到的,我不清楚:)
A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value.
Additional methods that depend on the presence or absence of a contained value are provided, such as orElse() (return a default value if value not present) and ifPresent() (execute a block of code if the value is present).

This is a value-based class; use of identity-sensitive operations (including reference equality (==), identity hash code, or synchronization) on instances of Optional may have unpredictable results and should be avoided.
An immutable object that may contain a non-null reference to another object. Each instance of this type either contains a non-null reference, or contains nothing (in which case we say that the reference is "absent"); it is never said to "contain null".
A non-null Optional<T> reference can be used as a replacement for a nullable T reference. It allows you to represent "a T that must be present" and a "a T that might be absent" as two distinct types in your program, which can aid clarity.

Some uses of this class include

As a method return type, as an alternative to returning null to indicate that no value was available
To distinguish between "unknown" (for example, not present in a map) and "known to have no value" (present in the map, with value Optional.absent())
To wrap nullable references for storage in a collection that does not support null (though there are several other approaches to this that should be considered first)
A common alternative to using this class is to find or create a suitable null object for the type in question.

This class is not intended as a direct analogue of any existing "option" or "maybe" construct from other programming environments, though it may bear some similarities.

Comparison to java.util.Optional (JDK 8 and higher): A new Optional class was added for Java 8. The two classes are extremely similar, but incompatible (they cannot share a common supertype). All known differences are listed either here or with the relevant methods below.
public static <T> Optional<T> fromNullable(@Nullable
                           T nullableReference)