2013-05-14 78 views
1

我有下面的類:電話==不選擇將等於

abstract class IRDMessage extends Ordered[IRDMessage] { 

    val messageType: MessageType.Type 
    val timestamp: DateTime 
    val content: AnyRef 

    def compare(that: IRDMessage): Int = { 
    val res = timestamp compareTo that.timestamp 
    res 
    } 

    override def equals(obj: Any): Boolean = obj match{ 
    case message: IRDMessage => compareTo(message) == 0 
    case _ => false 
    } 

} 

我有幾個具體的實現,以及。但是,當我試圖說任何IRDMessage的子類型的a == b時,equals方法不會被調用,它只是比較引用(默認等於實現)。任何想法可能會造成這種情況?

子類是簡單的案例類btw。

+3

你能否提供完整的工作代碼來顯示失敗?當我簡化你所擁有的東西時,我看不到這樣的問題。 – 2013-05-14 15:40:51

回答

1

這並不實際工作給予了下面的簡單示例:

object MessageTest { 
    def main(args: Array[String]) { 
    val m1 = MessageImpl("foo") 
    val m2 = MessageImpl("bar") 
    m1 == m2 
    } 
} 

abstract class IRDMessage extends Ordered[IRDMessage] { 
    val content: AnyRef 
    override def equals(obj: Any): Boolean = { 
    println("in here") 
    obj match{ 
     case message: IRDMessage => compareTo(message) == 0 
     case _ => false 
    } 
    } 

} 

case class MessageImpl(content:String) extends IRDMessage{ 
    override def compare(that:IRDMessage) = 0 
} 

你可以發佈多一點的代碼,特別是你的樣品箱類之一?我發現,如果我定義的情況下類,像這樣:

case class MessageImpl extends IRDMessage{ 
    var content = "foo" 
    override def compare(that:IRDMessage) = 0 
} 

預期它不工作。