Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决scala中的java.lang.NullPointerException?_Java_Scala - Fatal编程技术网

如何解决scala中的java.lang.NullPointerException?

如何解决scala中的java.lang.NullPointerException?,java,scala,Java,Scala,假设我的部分代码如下:- 其中doc是包含stu_名称和roll_编号的列表[文档] 有时stu_name和roll_name可能为空 我曾经尝试在前两行中避免空指针异常。 但为什么我在“val myRow”中再次出现空指针异常 我发现以下错误: [2016-01-14 22:40:16,896] WARN o.a.s.s.TaskSetManager [] [akka://JobServer/user/context-supervisor/demeter] - Lost task 0.0

假设我的部分代码如下:- 其中doc是包含stu_名称和roll_编号的列表[文档] 有时stu_name和roll_name可能为空

我曾经尝试在前两行中避免空指针异常。 但为什么我在“val myRow”中再次出现空指针异常

我发现以下错误:

 [2016-01-14 22:40:16,896] WARN  o.a.s.s.TaskSetManager [] [akka://JobServer/user/context-supervisor/demeter] - Lost task 0.0 in stage 0.0 (TID 0, 10.29.23.136): java.lang.NullPointerException
at com.test.events.Monitoring$$anonfun$geteventTableReplicateDayFunc$1.apply(Monitoring.scala:75)
at com.test.events.Monitoring$$anonfun$geteventTableReplicateDayFunc$1.apply(Monitoring.scala:57)
at com.test.events.Monitoring$$anonfun$27.apply(Monitoring.scala:104)
at com.test.events.Monitoring$$anonfun$27.apply(Monitoring.scala:104)
我在控制台中尝试了以下操作,但没有看到任何错误:

scala> val a = Try (Option.apply("atar")).getOrElse(null)
a: Option[String] = Some(atar)
scala> a.getOrElse(null)
res16: String = atar

scala> val a = Try (Option.apply(null)).getOrElse(null)
a: Option[Null] = None
scala> a.getOrElse(null)
res17: Null = null

这是完全错误的。通过使用
getOrElse(null)
基本上消除了使用
选项的所有优势。此外,产生的复杂性远远超过需要

您需要定义如果值为空,您将执行什么操作。这只是将它们保留为
选项
空输入):

或使用默认值:

val myRow = (
 doc.getFieldValue("ID").toInt,                          
 Option(doc.getFieldValue("stu_name")).getOrElse("default"),                 
 Option(doc.getFieldValue("roll_number")).map(_.toInt).getOrElse(0)  
)

如果
doc
null,那么?doc不能为null。有些字段是必须存在的。但是你确定吗?您的堆栈跟踪没有填写此处的所有详细信息。是的。当然..不能为空。我又添加了一个必填字段。
name.getOrElse(null)。toString
这完全不好<
null
上的code>toString
不存在。
val myRow = (
 doc.getFieldValue("ID").toInt,                         // Fails if null
 Option(doc.getFieldValue("stu_name")),                 // `None` if null   
 Option(doc.getFieldValue("roll_number")).map(_.toInt)  // `None` if null   
)
val myRow = (
 doc.getFieldValue("ID").toInt,                          
 Option(doc.getFieldValue("stu_name")).getOrElse("default"),                 
 Option(doc.getFieldValue("roll_number")).map(_.toInt).getOrElse(0)  
)