#java #class #comparable
#java #класс #comparable
Вопрос:
У меня вопрос по Java. Я пытаюсь реализовать Comparable в своем классе. Основываясь на моих исследованиях, заявление для моего класса было бы следующим:
public class ProEItem implements Comparable<ProEItem> {
private String name;
private String description;
private String material;
private int bomQty;
// other fields, constructors, getters, amp; setters redacted
public int compareTo(ProEItem other) {
return this.getName().compareTo(other.getName());
}
}// end class ProEItem
Однако я получаю ошибку компиляции, которая { ожидается после Comparable в объявлении класса. Я полагаю, это потому, что я застрял на java 1.4.2 (да, это печальная правда).
Итак, я попробовал это:
public class ProEItem implements Comparable {
private String name;
private String description;
private String material;
private int bomQty;
// other fields, constructors, getters, amp; setters redacted
public int compareTo(ProEItem other) {
return this.getName().compareTo(other.getName());
}
}// end class ProEItem
Без ProEItem после comparable, но тогда моя ошибка компиляции заключается в следующем:
"ProEItem is not abstract and does not override abstract method compareTo(java.lang.Object) in java.lang.Comparable
public class ProEItem implements Comparable {"
Итак, мой вопрос в том, что я делаю неправильно для реализации comparable в 1.4.2?
Спасибо.
Комментарии:
1. Я бы посоветовал вашей системной команде разрешить вам обновление. Даже Java 5 не поддерживается уже почти 2 года. Я знаю, что это не помогает непосредственной проблеме.
Ответ №1:
Он должен быть объявлен
public int compareTo(Object other)
Затем вам нужно привести other
объект к вашему типу ProEItem
и выполнить сравнение. Это нормально делать без проверки типа, other
поскольку compareTo
объявляется, что он может выдавать ClassCastException
(остерегайтесь вызывающего).
Ответ №2:
Ваш метод compareTo() должен принимать Object, а затем вы должны преобразовать его в ProEItem внутри метода.`
public int compareTo(Object other) {
return this.getName().compareTo(((ProEItem)other).getName());
}
Ответ №3:
compareTo
принимает Object
в качестве параметра в 1.4.2
например
public int compareTo(Object other) {
return this.getName().compareTo(other.getName());
}