如何防止Scala函数接收'null'作为参数

时间:2015-04-05 11:47:52

标签: scala scala-2.11

我有一个带有此签名的Scala方法:

  def m (map: Map [String, _])

我认为Map是一种引用类型,因此我可以调用m传递null

  m (null) // Allowed call

有没有办法让编译器不允许null是一些方法调用?像Kotlin这样的其他语言允许明确地说参数可以为null:http://kotlinlang.org/docs/reference/null-safety.html

Scala中有类似内容吗?

编辑:感谢您的评论。我理解'null'引用是运行时问题,但其他类型系统的其他语言在编译时会处理这个问题。

我只想知道Scala中是否还有一种方式(我开始使用该语言)。检查评论,答案和Scala type hierachy我的访客是不可能的。

对于值对象(如不可变集合和案例类),避免“null”(但它们扩展AnyRef)是有意义的。

我可以尝试避免'null',但是例如如果找不到键,Map.get会返回'null',所以我必须处理这个。

关于Map[String, _]它是一个异构地图,可以将其视为JSON对象。我可以用不同的,更像Scala的方式来处理它吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

根据JVM的定义,任何引用类型(AnyRef)都可以是null,并且编译器不能强制没有客户端使用null调用您的函数。

我强烈建议您在使用Scala时根本不使用null值。如果您需要处理缺席值,请改用Option类型。