有人可以解释一下为什么下面的代码不起作用:
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 :(得分:5)
Comparable#compareTo()
方法的参数属于T
类型,其中T
是Comparable
类型的泛型类型变量。换句话说,对于声明为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.