我正在努力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))