比较对象

时间:2011-06-09 00:33:39

标签: java compare

我有一个表单,允许用户输入有关地址信息的值。 我想将我从用户获得的值与存储在数据库中的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个值,它是在运行时指定的。如何比较两个对象?

4 个答案:

答案 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)

我会创建一个完全独立的类来进行比较,因为它们可能涉及特殊的逻辑和运行时配置。随着您的应用程序的增长,它可能涉及一些非常复杂的东西,如匹配状态(NYNew 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;