@parkito

Как сравнивать дженерики в java?

Здравствуйте. Помогите, пожалуйста решить следующую проблему.

Нужно чтобы компилировался и правильно работал:

public static void main(String[] args) {
            MyClass<Integer>a = new MyClass<Integer>(1);
            MyClass<Integer>b = new MyClass<Integer>(2);
            if (a>b)
            {
                System.out.println("true");
            }
        }


Как я понимаю, для того чтобы можно было сравнивать объекты класса, нужно чтобы этот класс реализовывал интерфейс Comparable.

class MyClass<T extends Comparable<T>> implements Comparable<T> {
    T data;

    MyClass(T data) {
        this.data = data;
    }
    

    public int compareTo(T o) {
        return compare(this.data, o);
    }

    public int compare(T x, T y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }
}


Но теперь как сдллать чтобы метод compare корректно сравнивал тех, кто > (кого можно сравнивать между собой).
  • Вопрос задан
  • 3164 просмотра
Решения вопроса 1
artemgapchenko
@artemgapchenko
Java это не C++, не Kotlin и не Scala. Перегрузки операторов нет, поэтому сделайте так:
if (a.compareTo(b) > 0) {
    doSomething();
}

В вашем случае MyClass должен имплементировать Comparable<MyClass<T>>, а не Comparable<T>. В compare() можно будет сравнивать между собой x.data и y.data, которые, в вашем случае, являются инстансами обобщенного типа, имплементирующего Comparable. Как-то так:

class MyClass<T extends Comparable<T>> implements Comparable<MyClass<T>> {
    T data;

    MyClass(T data) {
        this.data = data;
    }

    @Override
    public int compareTo(MyClass<T> another) {
        return data.compareTo(another.data);
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы