2013-12-08 6 views
0

У меня есть этот класс:Override равно

public class Phone{ 
    private String number; 
    //get and set of class 
} 

Тогда у меня есть еще один класс, который использует «Phone»

public class Antena{ 
    private String name; 
    private ArrayList<Phone> phones; 
} 

Теперь, прежде чем добавить элемент я хотел бы только добавить, если элемент Дон» t существует в массиве. Я новичок в Java, и после некоторых исследований я обнаружил, что мне нужно переопределить метод equals. Так может ли кто-нибудь дать мне несколько намеков?

Это, как я использую метод Equals:

if(!phones.equals(phone)) 
    phones.add(phone); 
+10

Рассмотрите возможность использования набора. Это не позволит дублировать. – user2336315

+1

Прочитайте http://docs.oracle.com/javase/tutorial/java/IandI/override.html о том, как переопределить методы - если у вас есть дополнительные вопросы, спросите что-то конкретное, включая информацию о том, как далеко вы получили и где вы застряли. –

+0

Я знаю, как переопределить методы. Я создал функцию переопределения в классе Antena и на телефоне, но не работал. – user2295277

ответ

1

Комментарии в настоящее время имеют достаточно информации, чтобы на самом деле ответить на этот вопрос.

Часть 1

Реализация равна:

public boolean equals(Object obj) { 
    if (obj == null) return false; 
    if (obj.getClass() != this.getClass()) return false; 
    Phone t = (Phone) obj; 
    return t.number.equals(this.number); 
} 

Часть 2

Реализация хэш-код

public int hashCode() { 
    return number.hashCode(); 
} 

Часть 3

Используйте набор вместо ArrayList требовать уникальности ..

private HashSet<Phone> phones; 
+0

'hashCode()' возвращает 'int', а не' long'. – user2336315

+0

И equals() не должен бросать исключение ClassCastException, если аргумент не является телефоном. –

+0

На самом деле вы должны проверить: if (obj instanceof Phone) или вы получите исключение, если вы, например, имеете строку в качестве объекта –

0

Вы переопределение равно способ сделать проверку равенства объектов класса. Например, у вас есть два объекта телефона p1 и p2.

Phone p1 = new Phone(); 
Phone p2 = new Phone(); 
p1.setNumber(10); 
p2.setNumber(10); 
\\Ideally these two objects are equal but when you try to do equality test , it will return false. 
System.out.println(p1==p2); // outputs false because p1 and p2 are two different references 

проведение различных адресов памяти. Кроме того,

System.out.println(p1.equals(p2)); // prints false when not overrided 

При переопределение равно метод, который вы можете добавить критерии логически проверить эти два объекта.

public boolean equals(Object obj) 
    { 

    if (!(obj instanceof Phone)) 
     return false; 
    return this.getNumber() == ((Phone)obj).getNumber(); 
    } 

Теперь, если вы вызываете метод equals на объекты p1 и p2, он вернет true. Тест метода Equals полезен, когда вы хотите приравнивать два объекта класса на основе переменных экземпляра, а не ссылочных адресов.

+0

Я сделал это, но он все еще не работает! Я добавил дополнительную информацию на главный пост. – user2295277

+0

способ, которым вы реализовали equals, не является правилом. используйте способ i override равен – anon