我有一个带有此签名的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的方式来处理它吗?
谢谢!
答案 0 :(得分:4)
根据JVM的定义,任何引用类型(AnyRef
)都可以是null
,并且编译器不能强制没有客户端使用null
调用您的函数。
我强烈建议您在使用Scala时根本不使用null
值。如果您需要处理缺席值,请改用Option
类型。