Java中是否有标准的Option或Nullable类?

gre*_*man 6 java class option

Nullable(C#)有一些不同的含义,但无论如何两者Option(Scala)Nullable都可以用来表达"有价值或无价值"的概念.

例如,如果您想在字符串中找到子字符串 - 而不是将Intscure -1作为Int,最好返回Option [Int](在Scala中它将是None无用的).

标准Java中是否有这样的类?如果是,那是什么?

请注意,我不是在问这样的课程.

更新

正如我所写,Nullable有不同的含义.考虑一下:

想象一下Map [K,V]和方法获取哪个语义是获取密钥的值,如果有这样的密钥,或者什么都没有这样的密钥.

你不能使用null有两个原因,你不能因为一个原因使用任何具体的类.选项[V]是要走的路.

T.J*_*der 5

在Java中,你会做的是,通常的方法是用nullInteger,Long等类(它们是的引用类型当量int,long等原语类型;被引用类型中,引用可以是null).如果你有一个C#背景,那么IntegerJava(带有自动装箱)就像int?在C#中一样.

例如,List#indexOf有这个签名:

int indexOf(Object o)
Run Code Online (Sandbox Code Playgroud)

......并且-1你正在谈论的事情.如果您正在设计List和首选null,您可能已将其定义为:

Integer indexOf(Object o)
Run Code Online (Sandbox Code Playgroud)

......并且返回null而不是-1"未找到"的情况.

Java中有所有基本类型的这些引用类型版本,当然,所有其他类型都已经是引用类型,因此您已经有了null选项.


Lum*_*umi 5

你问过两年多以前,但两个月前,Java SE 8已经推出java.util.Optional<T>.有关介绍,请参阅此Technet文章:

厌倦了空指针异常?考虑使用Java SE 8的可选项!


小智 2

没有。Java 中没有这样的构造标准。*

在FunctionalJava中有Option ,或者,正如yshavit所说,在Guava中有Optional ...或者,你可以创建自己的类型...但是没有适当的语言支持...好吧,我们就说我避免使用Java;-)

快乐编码。


*我不同意这一点IntegerDouble履行这个角色,因为它们只包装固定的原语集,而不是通用容器。它们可以被认为涵盖了 的情况Nullable,只是由于 Java 的固定值类型集和 C# 的限制Nullable(仅适用于 ValueTypes),但它们并不能取代真实Option类型。

但请注意,OptionFJ 或 Guava仍然使用(实际上必须)包装器类型(例如Integer)来处理原语。另请注意,由于上述限制,NullableC# 中的内容与 Scala 中的内容不同。Option