gpt4 book ai didi

scala - 对 Scala 的 NotNull 特征的库支持

转载 作者:行者123 更新时间:2023-12-03 22:34:05 26 4
gpt4 key购买 nike

通知:从 Scala 2.11 开始,NotNull已弃用。

据我了解,如果您希望引用类型不可为空,则必须混合魔术 NotNull trait,编译器会自动阻止你输入 null -able 值。看到这个mailing-list thread例如。

缺少的是对不可为空类型的体面的库支持。如果我想写一个不需要直接接口(interface)java代码的包,并且我想阻止这个包中的所有类型使用null默认情况下,我别无选择,只能像这样重新定义所有构建变量

//can't actually do that, but just to give the general idea
class NString extends String with NotNull
class NMap[X,Y] extends Map[X,Y] with NotNull
...

我希望 scala 有(作为编译器插件或库)选项供我编写
import collections.notnull._

为了轻松禁止 null在特定的 scala 文件中使用。

是否有一个选项可以轻松地强制标准库中的许多有用类型不可为空?

最佳答案

我真的不知道和 NotNull 有什么关系,但我的印象是 Scala 还没有完全弄清楚它想如何处理 NotNull/Nullable 概念。我自己的策略是永远不要在 Scala 中使用 null,如果您调用可能返回 null 的 Java API,请立即将其转换为 Option .

这个实用方法是我最好的 friend :

def ?[A <: AnyRef](nullable: A): Option[A] = if (nullable eq null) None else Some(nullable)

然后你做这样的事情:
val foo: Option[Foo] = ?(getFooFromJavaAPIThatMightReturnNull())

我发现这比尝试跟踪可能为空或不为空的内容要简单得多。

所以我根本没有回答你的问题,但我把它传递给它以防万一......

更新 :最近的 Scala 版本现在在标准 API 中支持这一点:
val foo: Option[Foo] = Option(getFooFromJavaAPIThatMightReturnNull())

关于scala - 对 Scala 的 NotNull 特征的库支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com