public class Employee{
int empId;
String empName;
List <EmployeeAddress> empAdd;
// getters & setters
}
public class EmployeeAddress{
String city;
String state;
// getters & setters
}
现在我制作两个员工类对象,并想比较它们。我在员工类中使用了list,因为员工可以有多个地址。需要帮助
答案 0 :(得分:1)
因为说“比较”并不清楚你的意思,我想你需要覆盖equals
课程中的Employee
方法。
首先,我建议您在SO上查看这个有趣的问题:What issues should be considered when overriding equals and hashCode in Java?
然后,根据List
接口的equals
方法合同:
如果两个列表包含相同顺序的相同元素,则它们被定义为相等。此定义确保equals方法在List接口的不同实现中正常工作。
所以你可以编写类似的代码:
@Override
public boolean equals(Object obj) {
Employee e = (Employee) obj;
return this.empId == e.empId && this.empName.equals(e.empName) && this.empAdd.equals(e.empAdd);
}
或者您可以为列表比较定义自定义逻辑...
答案 1 :(得分:0)
首先,我建议将List<EmployeeAddress>
更改为Set<EmployeeAddress>
。这有两个方面:
话虽如此,确保EmployeeAddress的equals方法也得到了很好的实现,因为Set接口将要求它在检测重复时正常工作。然后你将实现等于:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Employee)) {
return false;
}
Employee other = (Employee) obj;
if (this.empAdd == null) {
if (other.empAdd != null) {
return false;
}
} else if (!this.empAdd.equals(other.empAdd)) {
return false;
}
if (this.empId != other.empId) {
return false;
}
if (this.empName == null) {
if (other.empName != null) {
return false;
}
} else if (!this.empName.equals(other.empName)) {
return false;
}
return true;
}
EmployeeAddress类的equals方法的实现应该如下:
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof EmployeeAddress)) {
return false;
}
EmployeeAddress other = (EmployeeAddress) obj;
if (this.city == null) {
if (other.city != null) {
return false;
}
} else if (!this.city.equals(other.city)) {
return false;
}
if (this.state == null) {
if (other.state != null) {
return false;
}
} else if (!this.state.equals(other.state)) {
return false;
}
return true;
}