2016-03-02 3 views
0

Мне нужно иметь собственный метод равный для нескольких классов case. После некоторых онлайн-поиска я не вижу никакого определенного решения. Должен ли я написать свой собственный метод проверки равенства?Переопределение равных в Scala

+0

Я бы посоветовал вам тщательно рассмотреть ваш дизайн - если вам нужно индивидуальное равенство, тогда класс «случай» редко подходит. Если вы просто хотите, чтобы поля были общедоступными, вы можете сделать это с помощью обычного 'class', используя' val' или 'var' декларации:' class MyClass (val x: Int, val y: String, ...) '. – lmm

ответ

2

Да. Вам нужно будет определить свой собственный equals метод:

case class Person(...) { 

    override def equals(other: Any): Boolean = { 
     ... 
    } 

    override def hashCode: Int = { 
     ... 
    } 
} 

Метод equals выглядит просто, но это также может быть уловкой. Я настоятельно рекомендую вам прочитать следующую главу книги «Скала» о том, как Define an equals Method (Object Equality) и это эссе в Artima: How to Write an Equality Method in Java.

+0

Спасибо за ваш вклад. Мой вопрос касается классов дел. Для моего онлайн-поиска это не то же самое, что класс. Значения равны «==», если класс генерируется компилятором. – TeeKai

+0

Да. Компилятор генерирует их **, если вы не **. Но, если вы это сделаете, как показывает ответ, компилятор не будет генерировать его. – marcospereira

Смежные вопросы