var properties:Map[String,Map[String, DProperty]] = null
//some code goes here
properties = Map[String,Map[String, DProperty]]()
我真的不明白为什么第二行甚至存在。调用Map类构造函数将再次将值初始化为某些默认值并将其分配给属性。 或者我弄错了? 那究竟发生了什么? scala有点新,请耐心等待!我在这里找不到任何类似的东西! 提前谢谢!
答案 0 :(得分:2)
这一行:
properties = Map[String,Map[String, DProperty]]()
将变量初始化为空Map,这比拥有null
要好得多,因为您可以调用所有Map方法而不必担心空指针异常,我不明白为什么要初始化变量诚实地null
。
scala> properties = Map[String,Map[String, DProperty]]()
properties: Map[String,Map[String,DProperty]] = Map()
scala> properties.map(x => x.toString)
res1: scala.collection.immutable.Iterable[String] = List()
scala> var properties:Map[String,Map[String, DProperty]] = null
properties: Map[String,Map[String,DProperty]] = null
scala> properties.map(x => x.toString)
java.lang.NullPointerException
另外,我不知道你的用例,但请注意scala方式是使用val
(不可变变量)而不是var
(可变变量)。
答案 1 :(得分:1)
正确的问题是第一个行存在的原因。相反,应立即初始化变量:
var properties:Map[String,Map[String, DProperty]] = Map.empty // or Map(), no need to repeat the type arguments
不要使用null
,除非你真的,真的有充分的理由。
答案 2 :(得分:1)
初始化可变Map
的Scalish类型安全方法涉及使用Option
,如此,
var properties: Option[Map[String,Map[String, DProperty]]] = None