Nullable
(C#)有一些不同的含义,但无论如何两者Option
(Scala)Nullable
都可以用来表达"有价值或无价值"的概念.
例如,如果您想在字符串中找到子字符串 - 而不是将Intscure -1作为Int,最好返回Option [Int](在Scala中它将是None
无用的).
标准Java中是否有这样的类?如果是,那是什么?
请注意,我不是在问这样的课程.
正如我所写,Nullable
有不同的含义.考虑一下:
想象一下Map [K,V]和方法获取哪个语义是获取密钥的值,如果有这样的密钥,或者什么都没有这样的密钥.
你不能使用null有两个原因,你不能因为一个原因使用任何具体的类.选项[V]是要走的路.
在Java中,你会做的是,通常的方法是用null
和Integer
,Long
等类(它们是的引用类型当量int
,long
等原语类型;被引用类型中,引用可以是null
).如果你有一个C#背景,那么Integer
Java(带有自动装箱)就像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
选项.
小智 2
没有。Java 中没有这样的构造标准。*
在FunctionalJava中有Option ,或者,正如yshavit所说,在Guava中有Optional ...或者,你可以创建自己的类型...但是没有适当的语言支持...好吧,我们就说我避免使用Java;-)
快乐编码。
*我不同意这一点Integer
或Double
履行这个角色,因为它们只包装固定的原语集,而不是通用容器。它们可以被认为涵盖了 的情况Nullable
,只是由于 Java 的固定值类型集和 C# 的限制Nullable
(仅适用于 ValueTypes),但它们并不能取代真实Option
类型。
但请注意,Option
FJ 或 Guava仍然使用(实际上必须)包装器类型(例如Integer
)来处理原语。另请注意,由于上述限制,Nullable
C# 中的内容与 Scala 中的内容不同。Option