我有一個JList的Swing應用程序與自定義listmodel一起工作。比較對象與反序列化對象
該模型有一個ArrayList來存儲所使用的對象。這種情況如下:
在關閉應用程序,在ListModel的所有對象序列化(默認方式,類只是實現了Serializable
),並通過ObjectOutputStream
寫入一個文件。當應用程序啓動時,所有對象都將從文件中讀取並再次存儲在我的自定義ListModel
中。
我想添加一個功能,讓用戶也從他指定的文件中導入對象。另一個類中的靜態方法讀取文件中的所有對象,並將其返回到ArrayList
中。然後,我使用MainForm
類中的for-each循環來存儲ListModel
中返回的ArrayList
中的每個對象。在循環中,我想檢查ListModel
是否已經包含某個對象,但這不起作用。
在代碼中,我做了以下內容:
for(MyObject o: readObjects) {
if(!myListModel.contains(o)) //listmodel just calls contains() on its ArrayList
myListModel.addElement(o);
}
然而,即使對象是已經在ArrayList中(我一直進口來自同一個文件對象),他們仍然增加。
問題是,在反序列化時,對象是不是再平等了,是否有方法來比較它們呢?
你是否重寫對象類中的equals()方法? – 2012-04-17 15:21:30
不,我不知道。我是不是該? – MarioDS 2012-04-17 15:21:56
@MarioDeSchaepmeester如果不覆蓋equals,contains將測試引用是否相等(Object類中equals的默認行爲)。即使不使用序列化,如果使用相同的字段創建2個對象,上面的代碼將無法達到您所期望的效果(例如:'list.add(new MyObject());'和'list.contains(new MyObject ))'會返回false)。 – assylias 2012-04-17 15:23:45