【发布时间】:2018-04-11 07:01:10
【问题描述】:
public class Test3{
public static void main(String[] args)
{
String s="1";
String s1="2";
System.out.println(Compare.compare(s, s1));
}
}
class Compare {
public static Comparable compare ( Comparable o1, Comparable o2 ) {
if (o1.compareTo(o2) > 0)
return o1;
else
return o2;
}
}
以上代码输出2,如果使用String.compareTo(String str)则正确。但是o1的类型实际上是原始类型Comparable而不是Comparable<String>,即使是Comparable<String>,Comparable o2也不能作为参数传递。
那么,o1.compareTo(o2) 实际调用的是什么?以及它是如何工作的
【问题讨论】:
-
您能解释一下,“但是 o1 的类型实际上是 Comparable 而不是 Comparable,即使它是 Comparable,Comparable o2 也不能作为参数传递。”是什么意思? Comparable 是一个通用接口。如果没有给出,Java 会将它们作为 Object 处理并使用它的 compareTo() 实现。
-
我的意思是原始类型 Comparable 不是 Comparable ,即使它是 Comparable 。抱歉,我不知道我们不能在 stackoverflow 中简单地写 符号。
-
@Arman 在这种情况下不是,
String#compareTo将被使用
标签: java-8 comparable generic-programming compareto