2016-10-04 96 views
0

我有一個基本的抽象類和從它派生的幾個案例類。我需要一個哈希函數來識別重複的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

回答

0

案例類默認情況下在其構造函數參數上具有散列碼實現。你可以像下面那樣使用它,並避免實現你自己的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