use*_*469 2 null scala optional
所以让我说我有一些课:
case class Product(id: Int, name: String)
Run Code Online (Sandbox Code Playgroud)
如果我正在与某些Java API接口,并且这些值中的任何一个为null的可能性,那么我可以写:
case class Product(id: Option[Int], name: Option[String])
Run Code Online (Sandbox Code Playgroud)
如果我没有与任何有空值作为概念的东西接口,那么只需坚持第一个实现就可以了吗?这似乎有点烦人,因为我必须编写单元测试来测试这些东西......
我们将非常感谢您的想法.
niv*_*vox 10
何时使用Option的问题应该更多地与值可能丢失的事实相关,而不是将值错误地设置为null.
为了澄清,如果你担心你的库的用户可能以某种方式将idor或name字段设置为null,你应该在两个版本中检查它.事实上,Option它本身并没有给你任何保证.
此外,使用一个选项,其中一个不是真正可选的值真的是误导.
我通常Option只使用显式声明一个值可能不存在而且是一个有效状态.
在与Java交互时,我采用以下两种策略,具体取决于我是提供API还是使用它:
Option,而是使用一个小的构造函数包装器来检查所有参数是否为null并抛出,IllegalArgumentException否则.Option包装所有返回的值,以便我的Scala代码可以更清晰地处理这些情况.