Вам следует избегать null
, если нет веских причин не делать этого. Как бы то ни было, вы могли бы просто написать это:
def apply(name : String, alpha3Code : String, alpha2Code : String) = new Language(name, alpha3Code, Option(alpha2Code))
def apply(name : String, alpha3Code : String) = new Language(name, alpha3Code, None)
Предпосылки в порядке. Вы могли бы написать это так:
require(Option(alpha3Code) exists (_.nonEmpty))
require(Option(name) exists (_.nonEmpty))
Не обязательно улучшение, хотя.
A String
имеет hashCode
, поэтому я не понимаю, почему вы вызываете другой метод для генерации хеш-кода вместо простого вызова alpha3Code.hashCode
. Я думаю, что в Scala API что-то есть. Не уверен.
В коде equals
должен быть метод canEqual
, если вы не указали класс sealed
или final
. Сопоставление с образцом - в значительной степени способ сделать это, хотя вы могли бы написать это так при наличии экстрактора:
case Language(_, `alpha3Code`, _) => true
Но то, как вы это написали, во многом так, как обычно.