gpt4 book ai didi

java - 将对象与反序列化对象进行比较

转载 作者:行者123 更新时间:2023-12-02 00:25:09 25 4
gpt4 key购买 nike

我有一个带有 JList 的 Swing 应用程序,可与自定义列表模型配合使用。

该模型有一个 ArrayList 来存储所使用的对象。情况如下:

关闭应用程序后,列表模型中的所有对象都会被序列化(默认情况下,该类仅实现Serialized),并通过ObjectOutputStream写入文件。当应用程序启动时,将从文件中读取所有对象并再次存储在我的自定义 ListModel 中。

我正在尝试添加一项功能,让用户也可以从他指定的文件中导入对象。另一个类中的静态方法从文件中读取所有对象,并在 ArrayList 中返回它们。然后,我使用 MainForm 类中的 for-each 循环将返回的 ArrayList 中的每个对象存储在 ListModel 中。在循环中,我想检查 ListModel 是否已包含某个对象,但这不起作用

在代码中,我正在执行以下操作:

for(MyObject o: readObjects) {
if(!myListModel.contains(o)) //listmodel just calls contains() on its ArrayList
myListModel.addElement(o);
}

但是,即使对象已经在 ArrayList 中(我不断从同一个文件导入对象),它们仍然会添加。

问题是,为什么反序列化时对象不再相等,有没有办法比较它们?

最佳答案

这是一个简单的java对象

public class MyObject {

private String firstname;
private String lastname;
private String email;

public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstname == null) ? 0 : firstname.hashCode());
result = prime * result
+ ((lastname == null) ? 0 : lastname.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyObject other = (MyObject) obj;
if (firstname == null) {
if (other.firstname != null)
return false;
} else if (!firstname.equals(other.firstname))
return false;
if (lastname == null) {
if (other.lastname != null)
return false;
} else if (!lastname.equals(other.lastname))
return false;
return true;
}
}

(由 eclipse 自动生成的 hashcode 和 equals)

如果您查看 equals() 方法,您将看到在名字和姓氏字段上比较 2 个对象,并且只有这 2 个对象。这意味着如果您在列表中插入这种类型的对象,您将能够使用contains(Object o),如果一个对象包含相同的名字和姓氏,您就会找到它。

关于java - 将对象与反序列化对象进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10194036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com