我正在努力unapply
用我自己的实现替换案例类的伴随对象上的方法。在调查了许多与 implementation 相关的不同切线之后unapply
,似乎null
在它们中的大多数中都有一个保护,无论是在编译器生成的代码中,还是在它被显式重新定义的实现中。编译器生成的代码unapply
看起来与此类似(其中一些使用eq
而不是ne
):
def unapply(location: Location): Option[(Double, Double)] =
if (location ne null)
Some((location.longitude, location.latitude))
else
None
鉴于null
在纯(即惯用的)Scala 代码中绝对不应该使用,为什么null
要执行此检查?它是否与 Java 互操作(因为 Java 仍然沉迷于利用null
)泄漏到unapply
方法中有关?如果我删除了检查,因为我已经消除了unapply
传递方法的案例类实例可能为空或无效的可能性,我会遭受什么(如果有的话)不良后果?IOW,用这个替换上述实现有什么害处?
def unapply(location: Location): Option[(Double, Double)] =
Some((location.longitude, location.latitude))