簡體   English   中英

在Scala中處理java.lang.NullPointerException

[英]Handle java.lang.NullPointerException in Scala

假設我有一個模型類,如下所示:

class User () {
  var id: Option[java.lang.Long] = _
  var name: Option[String] = _
  var date: Option[java.util.Date] = _

  def this(id: java.lang.Long,name: String, date: java.util.Date){
    this()
    this.id=Option(id)
    this.name=Option(name)
    this.date=Option(date)
  }
}

我試圖通過這樣做來創建一個對象

var obj = new User
obj.id=12345
obj.name=user

顯然obj.datenull ,此時我一直收到java.lang.NullPointerException 我該如何處理這個例外?

我建議你直接通過構造函數初始化值。 這看起來像一個POSO(普通的舊Scala對象),所以也許你會更好用一個不可變的case類:

case class User(id: Option[Long], name: Option[String], date: Option[Date])

現在,如果只想初始化某些屬性,可以通過伴隨對象傳遞None或創建輔助構造函數:

case class User(id: Option[Long], name: Option[String], date: Option[Date])
object User {
  def apply(id: Option[Long], name: Option[String]) = {
    User(id, name, None)
  }
}

編輯:

如果Java互操作很重要,您可以在case類中定義多個構造函數,這些構造函數將在Java中可見:

case class User(id: Option[Long], name: Option[String], date: Option[Date]) {
  def this(id: Long, name: String) = {
    this(Some(id), Some(name), None)
  }
}

Option[T]一個好處是它有一個安全的默認值None 因此,將您的變量初始化為None而不是null

您還應該考慮使您的模型類不可變。

更簡單的方法是這樣做

case class User(id: Option[Long]=None, name: Option[String]=None, date: Option[Date]=None)

在這種情況下,如果您給出一個值,它取值,否則它將取無值作為默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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