Реализация Comparable в java 1.4.2

#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());
}