簡體   English   中英

何時使用Option#或Null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM