在scala类中实现哈希方法

问题描述:

我有一个基本的抽象类和从它派生的几个案例类。我需要一个哈希函数来识别重复的case对象。是否有内置的哈希方法在scala中?在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 

我需要在基类的哈希函数,使一个独特的价值对于每个派生类。

+0

你可以给你的问题的示例代码说明? – Samar

+0

我编辑了我的问题.. – mahdi62

案例类默认情况下在其构造函数参数上具有散列码实现。你可以像下面那样使用它,并避免实现你自己的hashcode进行相等性测试。

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抽象类象下面这样:

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

好吧,我想在基类中有一个虚拟成员(HASH_CODE),然后可以在派生类中重写,我使用this.hashCode()..我们有一些像虚拟C# Scala..Ihave编辑我的问题.. – mahdi62

+0

正如你写的,只要调用内置的hashCode方法(它返回一个int虽然)将值存储在hashValue中。 – Samar