Реализация метода хэша в классах scala

У меня есть базовый абстрактный класс и несколько классов падежей, производных от него. Мне нужна хэш-функция для идентификации повторяющихся объектов case..есть ли встроенный метод хэша в scala?

например, у меня есть базовый класс

abstract class CDR_NOR {
val SUBSCRIBER_ID: String
val CHARGING_ID: String
val NODE_ID: String
val START_TIME: String
val hashvalue:Strng

//hashvalue=this.hashCode().toString() doesn't work here
}

а также некоторые производные классы, как показано ниже:

case class CHG_NOR(Subscriber_ID: String,..., hashvalue:String) extends   CDR_NOR

case class NW_NOR(Subscriber_ID: String,...,hashvalue:String) extends  CDR_NOR

Мне нужно иметь хэш-функцию в базовом классе, которая делает уникальное значение для каждого производного класса..

1 ответ

  1. Классы Case по умолчанию имеют реализацию хэш-кода над своими параметрами конструктора. Вы можете использовать это, как показано ниже, и избежать реализации собственного хэш-кода для тестирования равенства.

    abstract class CDR_NOR {
      val SUBSCRIBER_ID: String
      val CHARGING_ID: String
      val NODE_ID: String
      val START_TIME: String} 
    
    case class CHG_NOR(SUBSCRIBER_ID: String, CHARGING_ID: String, NODE_ID: String, START_TIME: String) extends   CDR_NOR 
    
    val x = CHG_NOR("001","123","1","12:23AM")
    
    val y = CHG_NOR("001","123","1","12:23AM")
    
    x == y // true
    

    Если вы хотите настроить реализацию хэш-кода, то переопределите хэш-код в абстрактном классе, как показано ниже:

    override def hashCode: Int = {// your custom implementation}