使用compare方法的可比接口

时间:2014-01-04 01:28:07

标签: java comparable

有人可以解释一下为什么下面的代码不起作用:

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);不应该有任何区别。有人可以解释一下吗?

谢谢。

2 个答案:

答案 0 :(得分:5)

Comparable#compareTo()方法的参数属于T类型,其中TComparable类型的泛型类型变量。换句话说,对于声明为Comparable<Integer>的变量,该方法只接受Integer。您尝试传递的参数声明为类型Comparable<Integer>,这是不兼容的。

答案 1 :(得分:1)

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.