2016-10-03 5 views
0

У меня было переопределенное равное для класса объекта, так что каждый раз, когда повторялся дубликат при добавлении объектов этого класса в список массивов, всплывало диалоговое окно. Но это всплывает с списком remove() для массива. Есть ли способ сделать это условным, основанным на том, какой метод использует равные? Как два разных равенства, или, может быть, использовать другой метод списка массивов, который позволяет вам указать, что равно использовать?Переопределение равных только для одного метода

Редактировать: Извините, что с моим вопросом очень неясно. Вот мои переопределенные равенства и методы Hashcode:

@Override 
public boolean equals(Object s) { 
    if(!(s instanceof Car)) { 
    return false; 
} 

    Car s2 = (Car)s; 
    if(this.name.equals(s2.name) && this.ride.equals(s2.ride)){ 
     Alert alert = new Alert(AlertType.INFORMATION); 
     alert.setTitle("Delete Item"); 
     alert.setHeaderText(
     "Are you sure?"); 
     alert.showAndWait(); 
     return true; 
    } 
    return false; 

} 

@Override 
public int hashCode(){ 
    int hashC; 

    hashC = name.hashCode(); 
    hashC *= ride.hashCode(); 
    return hashC; 
} 

Что касается остального, я использую HashSet для удаления дубликатов автоматически.

+1

Показанный код - лучший способ отследить ошибки –

+0

@ Хемлата вы прочитали полный вопрос? –

+2

Если вы хотите избежать использования дубликатов, используйте set. Метод equals не используется при добавлении элементов в список, поэтому переопределение его не имеет смысла, причина remove() отображает диалоговое окно, потому что remove() использует метод equals для сравнения, когда используется метод remove (object). – pkoli

ответ

1

Не делайте equals Сделайте что-нибудь большее, чем то, что должно делать contract. Вместо этого используйте проверку для indexOf, чтобы узнать, существует ли элемент в List.

if (list.indexOf(object) != -1) { 
    dialog.show(); 
} else { 
    list.add(object); 
} 

Если вы не хотите, коллекция содержит все дубликаты, и вы не заботитесь о порядке элементов, однако, вы должны использовать HashSet вместо List. Это автоматически отключит дубликаты, проверив equals и вернет false в методе add, когда существует дубликат. Вам также нужно будет переопределить метод hashCode на вашем объекте.

if (!set.add(object)) { 
    dialog.show(); 
} 
+0

Да, я думаю, я слишком старался сохранить свой старый код, несмотря на последние недостатки, которые возникли. Спасибо за помощь. –

+0

@MohSel Возможно, вам захочется найти шаблон проектирования MVC, который отделяет пользовательский интерфейс от базовых структур данных. В общем, код UI не должен быть найден в классе, таком как «Автомобиль». – 4castle

Смежные вопросы