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#背景,那么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选项.
小智 2
没有。Java 中没有这样的构造标准。*
在FunctionalJava中有Option ,或者,正如yshavit所说,在Guava中有Optional ...或者,你可以创建自己的类型...但是没有适当的语言支持...好吧,我们就说我避免使用Java;-)
快乐编码。
*我不同意这一点Integer或Double履行这个角色,因为它们只包装固定的原语集,而不是通用容器。它们可以被认为涵盖了 的情况Nullable,只是由于 Java 的固定值类型集和 C# 的限制Nullable(仅适用于 ValueTypes),但它们并不能取代真实Option类型。
但请注意,OptionFJ 或 Guava仍然使用(实际上必须)包装器类型(例如Integer)来处理原语。另请注意,由于上述限制,NullableC# 中的内容与 Scala 中的内容不同。Option
| 归档时间: |
|
| 查看次数: |
3193 次 |
| 最近记录: |