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

#scala

#scala

Вопрос:

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

2. Я отредактировал свой вопрос..

Ответ №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
  

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

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

Комментарии:

1. Хорошо, я хочу иметь виртуальный член (HASH_CODE) в базовом классе, который затем может быть переопределен в производном классе, который я использую this.hashCode() .. есть ли у нас что-то вроде virtual i C # в Scala.. Я отредактировал свой вопрос..

2. Как вы уже писали, просто вызовите встроенный метод hashCode (хотя он возвращает значение int), чтобы сохранить значение в hashValue.