Я работаю над заменой метода unapply
на объекте-компаньоне класса case моей собственной реализацией. И после изучения множества различных касательных, связанных с реализацией 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
? Какие нежелательные последствия будут иметь место, если я уберу проверку, потому что я исключил возможность того, что экземпляр класса case, в который передается метод unapply
, может быть нулевым или недействительным? Итак, какой вред замены вышеуказанной реализации на эту?
def unapply(location: Location): Option[(Double, Double)] =
Some((location.longitude, location.latitude))