properties = Map [String,Map [String,DProperty]]()

时间:2014-08-06 06:44:30

标签: scala

var properties:Map[String,Map[String, DProperty]] = null
//some code goes here
properties = Map[String,Map[String, DProperty]]()

我真的不明白为什么第二行甚至存在。调用Map类构造函数将再次将值初始化为某些默认值并将其分配给属性。 或者我弄错了? 那究竟发生了什么? scala有点新,请耐心等待!我在这里找不到任何类似的东西! 提前谢谢!

3 个答案:

答案 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