【发布时间】:2014-06-02 10:07:43
【问题描述】:
我知道 null 在 Scala 中是不受欢迎的,并且应该始终将可选值包含在 Option 中(或者如果有可用的“null 类型”)。
优点很明显,永远不需要检查 null 值,生成的代码更安全,更易于阅读。
然而,在实践中,没有什么能阻止值成为null - 该规则不是由编译器强制执行的,更像是君子协定。例如,在与 Java API 交互时,这很容易被破坏。
这有最佳实践吗?例如,假设我需要编写一个Url 案例类,并且可以从java.net.URI 创建该类的实例:
object Url {
def apply(uri: URI): Url = Url(uri.getScheme, uri.getHost, uri.getRawPath)
}
case class Url(protocol: String, host: String, path: String) {
def protocol(value: String): Url = copy(protocol = value)
def host(value: String): Url = copy(host = value)
def path(value: String): Url = copy(path = value)
}
URI 实例可以为getScheme、getHost 和getRawPath 返回null。在apply(URI) 方法(例如require 语句)中防止这些被认为是足够的吗?从技术上讲,为了完全安全,最好保护protocol、host 和path 辅助方法以及构造函数,但这听起来像是大量的工作和样板。
是否认为安全?如果他们这样做了责备他们?
【问题讨论】:
标签: scala