Сопоставимый интерфейс с использованием метода сравнения

Может ли кто-нибудь объяснить мне, почему приведенный ниже код не работает:

public static void main(String[] args) throws IOException
 {
    Comparable<Integer> q = new Integer(4);
    Comparable<Integer> o = new Integer(4);
    // Problematic line
    int j = o.compareTo(q);

    if (j == -1)
        System.out.println("yes");
    else
        System.out.println("no");
 }

но этот работает:

public static void main(String[] args) throws IOException
 {
    Integer q = new Integer(4);
    Integer o = new Integer(4);

            // Problematic line
    int j = o.compareTo(q);

    if (j == -1)
        System.out.println("yes");
    else
        System.out.println("no");
 }

  }


Другими словами, когда реализация интерфейса является взаимозаменяемой, а не созданием экземпляра обычного класса? Ошибка возникает, когда я использую метод compareTo(), который является частью интерфейса Comparable и реализуется всеми классами Wrapper, такими как Integers.

Так что я думаю, что Comparable<Integer> q = new Integer(4); и Integer q = new Integer(4); не должны иметь никакого значения. Кто-нибудь может объяснить?

Спасибо.


person user3149650    schedule 04.01.2014    source источник
comment
Какой у Вас вопрос?   -  person Elliott Frisch    schedule 04.01.2014
comment
Да. Comparable<Integer> можно сравнить с Integer, а не с другим Comparable<Integer>.   -  person Dawood ibn Kareem    schedule 04.01.2014


Ответы (2)


Параметр метода Comparable#compareTo() имеет тип T, где T — переменная универсального типа типа Comparable. Другими словами, для переменной, объявленной как Comparable<Integer>, метод примет только Integer. Аргумент, который вы пытаетесь передать, объявлен как несовместимый тип Comparable<Integer>.

person Sotirios Delimanolis    schedule 04.01.2014

Comparable<Integer> может сравнивать только целые числа.

// This will work
Comparable<Integer> o = new Integer(4);
int j = o.compareTo(new Integer(4));
// of course j will be 0, because 4 is equal to 4.
person Elliott Frisch    schedule 04.01.2014