[英]Handle java.lang.NullPointerException in scala when accessing nested fields
我有一個用例
name = Person.getFirstSister().getname()
Person.getSister().getname()
給出java.lang.NullPointerException
因為Person.getSister()
是 java null
在scala中執行此操作的正確方法是什么? 我可以用下面的代碼來實現。 但是尋找更多的scala方式來做到這一點。
private def getFirstSisterName(person: Person): String = {
val sister = person.getFirstSister()
if (sister == null) ""
else sister.getName()
}
檢查null
是 Java 的方法。 Scala 提供了一組更加精簡的操作來避免手動進行空檢查。
自然的方法是讓getSister
結果為Option[Sister]
,其論點是並非每個人都有妹妹。
繼續同樣的想法,試圖模仿真實的詞,我會問:但是如果一個人有多個姐妹呢? 你如何區分它們? 這意味着你的設計不是很籠統,因為它意味着每個人都有一個姐妹。
自然的方法是讓getSisters
返回List[Sisters]
。 然后從列表中map
他們的名字。 如果列表為空,沒問題, Nil
代表一個空列表,所以我們不會有任何 null 問題:
case class Sister(name: String)
case class Person(sisters: List[Sister]) {
def sistersNames: String = sisters.map(_.name).mkString(" ")
}
val p = Person(List(Sister("Sandra"), Sister("Joanna")))
val p2 = Person(List.empty)
println(p.sistersNames) // Sandra Joanna
println(p2.sistersNames) // empty String
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.