2014-01-04 1 views
2

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

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, такими как целые.

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

спасибо.

+0

Что вы хотите сказать? –

+0

и ваш выход? – nachokk

+0

Да. «Сравнимый » - это то, что вы можете сравнить с «Целом» - не то, что вы можете сравнить с другим «Comparable ». –

ответ

5

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

1

A Comparable<Integer> может сравнивать только Integer (s).

// 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. 
Смежные вопросы