[英]When to use Option#orNull
據我所知,我們應該避免在Scala中使用null
。 如果某些字段在邏輯上不具有“無價值”,那么我們不應該使用Option
來避免過度使用Option
。
所以讓我們來看看代碼。 我有課
case class User (name: String)
並且我100%確定name
字段不能為null
,因此我只使用String
而不是Option[String]
。
問題是一些標准的Scala方法返回給我Option
。 (在我的例子中, IterableLike#find
方法返回Option)
所以問題是當我將name
包裝到Option
時如何創建User
實例? 要清楚一點,這就是代碼:
val userName: Option[String] = myList.find(...)
val user = User(userName.get) // or may be I should use userName.orNull ? or throw exception?
我聽說Option.get
不是優雅的解決方案。 orNull
方法與get
幾乎相同。
您想將Option[String]
映射到Option[User]
:
val userName: Option[String] = myList.find(...)
val user: Option[User] = userName.map(n => User(n))
orNull
主要用於Java互操作性。 在許多Java庫中使用null
作為orNull
值是普遍的,而orNull
則是一小段語法糖。 本質上它只是myOption.getOrElse(null)
但其函數名稱允許稍微更清晰的代碼。
在純Scala項目中使用orNull
至少可以說是奇怪的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.