Сравнение объектов в JAVA ... Часть 2 - PullRequest
0 голосов
/ 14 февраля 2012

Этот пост является продолжением моего предыдущего поста, найденного здесь

Сравнение объектов на равенство: JAVA

Основываясь на полученных предложениях, я создал следующий класс и сделал переопределение equals (), hashcode () .... все, используя Eclipse IDE. Однако я все равно получаю ложное значение, когда сравниваю два разных объекта, которые ссылаются на один и тот же класс, используя метод contains () массива, в котором хранятся эти объекты. Я не знаю, что не так в моей реализации. Хотелось бы помочь с устранением неполадок.

public class ClassA {

private String firstId;
private String secondId;
/**
 * @return the firstId
 */
public String getFirstId() {
    return firstId;
}
/**
 * @param firstId the firstId to set
 */
public void setFirstId(String firstId) {
    this.firstId = firstId;
}
/**
 * @return the secondId
 */
public String getSecondId() {
    return secondId;
}
/**
 * @param secondId the secondId to set
 */
public void setSecondId(String secondId) {
    this.secondId = secondId;
}
/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
public int hashCode() {
    final int PRIME = 31;
    int result = 1;
    result = PRIME * result + ((firstId == null) ? 0 : firstId.hashCode());
    result = PRIME * result + ((secondId == null) ? 0 : secondId.hashCode());
    return result;
}
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    final ClassA other = (ClassA) obj;
    if (firstId == null) {
        if (other.firstId != null)
            return false;
    } else if (!firstId.equals(other.firstId))
        return false;
    if (secondId == null) {
        if (other.secondId != null)
            return false;
    } else if (!secondId.equals(other.secondId))
        return false;
    return true;
}

}

ClassA clsA1 = new ClassA();
ClassA clsA2 = new ClassA();

clsA1.setFirstId("value1");
clsA1.setSecondId("value2");

clsA2.setFirstId("value1");
clsA2.setSecondId("value2");

ArrayList a1 = new ArrayList();
ArrayList a2 = new ArrayList();

a1.add(clsA1);
a2.add(clsA2);

if(a1.contains(clsA2)
{
    System.out.println("Success");
}
else
{ 
    System.out.println("Failure");
}

Я получаю результат как "Отказ"

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Я проверил ваш код, я получил успех, в Netbeans. Опечатка отсутствует ")" в если (a1.contains (clsA2)

"Конечно, это не получается. Ваши строки идентификатора в вашем тестовом коде имеют значение null, и метод equals записывается так, чтобы возвращать false, если это происходит. Возможно, вам следует разрешить равенство, если firstId и secondId равны NULL, или если либо равно NULL и оба других соответствуют. " Это не совсем верно.

Если оба идентификатора равны нулю, равные вернут истину. Только если одного удостоверения личности нет.

2 голосов
/ 14 февраля 2012

Вы получаете "Отказ", потому что вы проверяете, содержит ли a1 clsA2, если вы не добавили clsA2 к a1. Проверка, должно ли a2.contains(clsA2) выводить «Success»

0 голосов
/ 14 февраля 2012

Я просто скопировал и протестировал ваш код. Я получил успех. Вы пропустили только скобки после a1.contains(clsA2). Генерируемое затмением equals() правильно обрабатывает null.

...