是否有类型安全的方法来确保案例类的字段在Scala中不能为空?

正如问题所暗示的那样,有哪些不同的方法可以确保某人不会将 null 传递给例如案例类的某些字段。

我知道需要,但不是粉丝,因为它会引发未经检查的异常。

回答

Scala 2由于 JVM 限制,您无法强制使用它。但是,Scala 3/Dotty有一个有趣的选择加入功能,称为显式空值。

您可以在此处查看更多详细信息:http : //dotty.epfl.ch/docs/reference/other-new-features/explicit-nulls.html和此处:http : //dotty.epfl.ch/docs/internals/显式 nulls.html

本质上,您使用编译器标志启用此功能,-Yexplicit-nulls然后如果您违反非空性,您的代码将不会编译:

val x: String = null // error: found `Null`, but required `String`

val x: String | Null = null // ok - Union type

此外,它们对 Null union 类型(如 Flow Typing 和 Equality)进行了额外的类型改进。

它的工作方式是编译器生成 ,Null的子类型Any,而不是AnyRef像以前那样强制编译时检查。但由于 JVM 的实现方式,擦除后Null成为所有引用类型的子类型。

新的层次结构:

擦除后:

Scala 中的常规实践只是不使用null并假设您有行为良好的开发人员做同样的事情。使用Option来代替。在外围,如果您不信任库/模块/等的用户,您可以使用require.


以上是是否有类型安全的方法来确保案例类的字段在Scala中不能为空?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>