2017-01-17 64 views
-1

我想定義一個將用於實現地圖鍵的接口。該地圖使用equals和hasCode來定位和比較鍵。我的密鑰需要用自定義計算覆蓋這些密鑰。這是我想要做的。使用複雜密鑰很重要。謝謝具有equals和hashCode方法的通用接口,有可能嗎?

public interface CachedRequestKey<T>{ 
    public T complexKeyObject; 

    @Override 
    public boolean equals(T obj); 

} 

對選民編輯:我知道上面的代碼是無效的。我正在尋找想法來實現一個接口,以確保實現類使用泛型類型提供所需的方法。

+0

接口默認不包含實現,並且不能表示其他對象狀態。也許你會喜歡關鍵對象的裝飾類而不是?請澄清。 –

+0

你'equals'方法不正確會覆蓋'對象#equals',因此像你期望將無法正常工作。 – chrylis

+0

你可以換的對象,並保持額外的狀態存在。集合類將不使用定製等於/ hashCode方法,除非集合類是在比較(如TreeMap的)來定義的。 – john16384

回答

2

你想要的東西在Java中是不可能的。對象已經實現了equalshashCode,所以每個子類都自動執行。接口或抽象類沒有辦法要求它被重新實現。假定給定類的equalshashCode對於該類正確實現。

如果你真的需要你的類來實現特定的比較操作,並且不希望使用由事故現有的平等方法,你可以在你的接口,需要實現類來定義那些定義自己的比較函數。已經在equals和hashCode方法中實現了相等機制的類可以委託給現有的方法。

相關問題