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

How can I prevent an Scala function to receive 'null' as an argument

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

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

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

  m (null) // Allowed call

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

Scala 中有类似的东西吗?

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

我只想知道 Scala 中是否也有方法(我开始使用该语言)。检查评论、答案和 Scala type hierachy 我猜这是不可能的。

对于值对象(如不可变集合和大小写 类),避免 'null' 是有意义的(但是它们扩展 AnyRef)。

我可以尽量避免 'null',但是例如 Map.get returns 'null' 如果找不到密钥,所以我必须处理这个。

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

谢谢!

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

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