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

 2021-04-27 

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

我有一个具有以下签名的Scala方法:

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

我认为Map是引用类型,因此,我可以通过null

来调用m

1
  m (null) // Allowed call

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

Scala中有类似的东西吗?

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

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

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

我可以尝试避免使用'null',但是例如,如果找不到密钥,则Map.get返回'null',因此我必须处理这个问题。

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

谢谢!


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

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