How can I prevent an Scala function to receive 'null' as an argument
我有一个具有以下签名的Scala方法:
1
| def m (map : Map [String, _]) |
我认为Map是引用类型,因此,我可以通过null
来调用m
有什么方法允许编译器不允许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的方式来处理此问题吗?
谢谢!
- 使用标准编译器是不可能的,并且不能真正使用编译器插件。从2.11开始不推荐使用标记特征NotNull。顺便说一句,将_作为映射值的类型不能帮助类型安全。
-
null存在于Scala中,用于Java互操作。我们通常假装它不存在,因为它从根本上被破坏了。只是永远不要在任何地方传递null。
根据JVM的定义,任何引用类型(AnyRef)都可以为null,并且编译器无法强制说没有客户端使用null调用您的函数。
我强烈建议在使用Scala时完全不使用null值。如果需要处理缺少的值,请改用Option类型。