我有一个表单,允许用户输入有关地址信息的值。 我想将我从用户获得的值与存储在数据库中的ADDRESS表中的信息进行比较。 我有一个实体类
public class Address {
private String gevernate;
private int homeNo;
private String neighborhood;
private String street;
}
,表示为名为ADDRESS的数据库中的表。
我有一个这个类的视图对象,它返回db tabel
中的所有地址值public static Address getAddress(Connection Con, long stdID) {
// select stamatment and result set object.
}
我面临的问题是表单可能 NOT 包含Address对象的所有值,它可能只包含2或3个值,它是在运行时指定的。如何比较两个对象?
答案 0 :(得分:1)
为Address对象定义/覆盖equals()和hashcode()。比较如下:
address1.equals(address2)
答案 1 :(得分:1)
在类中添加一个equals方法,如下所示:
public class Address {
private String gevernate;
private int homeNo;
private String neighborhood;
private String street;
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Address other = (Address) obj;
if (gevernate == null) {
if (other.gevernate != null)
return false;
} else if (!gevernate.equals(other.gevernate))
return false;
if (homeNo != other.homeNo)
return false;
if (neighborhood == null) {
if (other.neighborhood != null)
return false;
} else if (!neighborhood.equals(other.neighborhood))
return false;
if (street == null) {
if (other.street != null)
return false;
} else if (!street.equals(other.street))
return false;
return true;
}
}
答案 2 :(得分:1)
我会创建一个完全独立的类来进行比较,因为它们可能涉及特殊的逻辑和运行时配置。随着您的应用程序的增长,它可能涉及一些非常复杂的东西,如匹配状态(NY
与New York
)等。
不要使用equals()
,而应该是对Java集合和通用目的有意义的任何实现“这个对象是否完全相同”。
基本理念:
int studentId = /* something */;
Connection conn = /* something */;
AddressForm form = /* something */;
Address userEnteredAddress = form.getEnteredAddress();
Address storedAddress = Address.getAddress(connection,studentId);
MyAddressComparer comp = new MyAddressComparer(form);
boolean similarEnough = comp.doMyVagueComparison(storedAddress,userEnteredAddress);
由AddressComparer
中的代码决定根据表单配置要执行的操作来确定需要应用的规则,并执行所有这些特殊用途的技巧。
答案 3 :(得分:0)
我只是称这个伪代码,因为我不懂Java:
if (this.gevernate != other.gevernate && this.gevernate != null && other.gevernate != null)
{
// If both "gevernate" members are valid, but unequal...
return false;
}
else if (this.homeNo != other.homeNo && this.homeNo != null && other.homeNo != null)
{
// Repeat for "homeNo" values.
return false;
}
// Repeat for the other two members.
else return true;