java - 在 Scala 中处理 java.lang.NullPointerException

标签 java 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(Plain Old Scala Object),所以也许你最好使用不可变的案例类:

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 互操作很重要,您可以在案例类中定义多个构造函数,这些构造函数将在 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)
  }
}

关于java - 在 Scala 中处理 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37454738/

相关文章:

java - 我可以使用生成的名称和值来声明和定义变量吗?

java - int 数据类型初始化 : Array vs Regular

需要两个隐式参数之一的 Scala 方法

scala - 传递类型参数以用作参数 LabelledGeneric

scala - 如何找到两个数据帧之间的精确匹配和非精确匹配?

java - 如何用Java实现下面的scala代码片段

java - 如何制作java启动器?

java - Tesseract 在线读取图像?

java - 当实例可能具有不同的数据类型时,如何返回该实例的正确数据类型?

angular - Angular HttpClient 未正确反序列化 Scala 类