1

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

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

我想 Map 是一个引用类型,因此,我可以调用m传递null

  m (null) // Allowed call

编译器有什么方法不允许null某些方法调用?Kotlin 等其他语言通过明确表示参数可以为空来允许这样做:http: //kotlinlang.org/docs/reference/null-safety.html

Scala中有类似的东西吗?

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

我只想知道 Scala 中是否也有办法(我开始使用这种语言)。检查评论、答案和我来宾的Scala 类型层次结构,这是不可能的。

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

我可以尝试避免“null”,但例如,如果找不到密钥,Map.get 将返回“null”,所以我必须处理这个问题。

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

谢谢!

4

1 回答 1

5

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

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

于 2015-04-05T11:54:29.240 回答