簡體   English   中英

訪問嵌套字段時在 scala 中處理 java.lang.NullPointerException

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

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