2013-10-16 115 views
0

我有一個類Xx1,x2等作爲其領域。我需要定義類X(它唯一標識類X的一個實例)的密鑰。所以我創建了一個類Key,其類X的字段子集。類Key的實例將是類X的字段。什麼是初始化密鑰的最佳位置?何處初始化派生字段?

public class X { 
    int x1; 
    int x2; 
    int x3; 
    Key key; 
} 

public class Key { 
    int x1; 
    int x3; 
} 

我有覆蓋等於和應該基於密鑰工作的散列碼方法。

+0

'key.x1'和'key.x3'應該是什麼值?它們是否會在運行時生成?他們會靜態嗎?這取決於你用什麼來初始化字段。 –

+0

初始化後,X的字段值不會改變 – Abichellam

+0

但是值會是什麼?他們會隨機?還是在編譯時知道? –

回答

0

如果該鍵應該是X的每個實例都是唯一的,那麼只需在構造方法中生成它即可。

1

我不會將Key類保留爲字段。我會考慮提供一個getter,每次調用它時都會返回一個新的鍵實例。

更好的是,只要調用equals/hash,關鍵類可以持有對X的引用並訪問其字段。這樣,您將永遠不必手動更新任何密鑰的任何值。

再然後,你可以只實施X hashCodeequals並使用HashSet代替HashMap的。