我有這樣的載體,其我定義爲實例變量,也可以作爲一個內部類:克隆一個目的是通過內部類定義
private Vector<MATIdentifier> matIds = new Vector<MATIdentifier>(){
@Override
public boolean add(MATIdentifier mi){
if(this.contains(mi)){
return false;
}
super.add(mi);
return true;
}
@Override
public boolean contains(Object o){
if(o instanceof MATIdentifier){
for(MATIdentifier mi: this){
if(mi.getIdValue().equals(((MATIdentifier)o).getIdValue())){
return true;
}
}
}
return false;
}
};
後來在節目中,我要填充這個向量來自數據庫。最好創建這個Vector類的新實例,而不是簡單地刪除所有元素並重用相同的對象 - 我想我可以這樣做,但我仍然想知道如何克隆該對象。
我知道如何做到這一點的唯一方法就是clone()這個對象。這安全嗎?它會克隆重寫的方法添加(MATIdentifier)幷包含(Object)?
也許我應該重寫clone()也......?或者Vector中的預定義clone()方法是否足夠?
注意:我把@Override註釋放在自己的位置,Java編譯器(Eclipse)沒有讓我那麼做。
與使用Java Set相反,這種方式我相信我會知道用戶(或我是程序員)是否試圖檢查Vector是否包含不是MATIdentifier的類型。如果類型不是MATIdentifier,我可以在contains方法中放置打印或日誌記錄語句。 –
也如您所說,我必須至少覆蓋java.util.Set中的equals(Object)。我猜測在Set中重載equals會給Set所需的包含功能 - 正如我在Vector子類中所需要的那樣。所以我必須將我的Set子類放入不同的類中,或者作爲內部類,對嗎? –
也注意到這一點:http://smallwig.blogspot.com/2007/12/why-does-setcontains-take-object-not-e.html –