以下是片段(来自Java Generics and Collections),下面是问题:
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder()
{
return new Comparator<T>() {
public int compare(T o1, T o2) { return o2.compareTo(o1); }
};
}
正如我所说的那样,你有一个使用通配符的方法,它可以比较类型T和“上面”。然后它返回一个新的Comparator,它在其中有一个方法,它使用两个类型为T的对象返回compareTo的值。所以问题:
这没有参数,所以o1和o2来自哪里?
答案 0 :(得分:5)
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return new Comparator<T>() {
public int compare(T o1, T o2) {
return o2.compareTo(o1);
}
};
}
你是:
compare
,该方法位于方法reverseOrder
中。o1
和o2
声明为compare
的参数。答案 1 :(得分:0)
问题/尝试答案:
正如我所说的那样,你有一个使用通配符的方法,它可以比较类型T和“上面”。
方法可以不扩展,所以不,这是不正确的。该方法是通用的,可以与扩展Comparable的具体类一起使用。
然后返回一个新的Comparator,它在其中有一个方法,它使用两个类型为T的对象返回compareTo的值。所以问题:
好的,有点正确。
1)这是在方法中定义一个方法吗?我以为你不能用Java做到这一点。
它不是方法中的方法。这是一个返回Comparator类型的对象的方法,它具有自己的比较方法。
2)它返回一个方法吗?我认为你不能用Java做的事情。
不,它返回一个匿名内部类的对象。
3)我该如何使用它?本书使用了其他类似方法具有参数的示例。这没有参数,那么o1和o2来自哪里?
o1和o2是Comparator对象比较方法的声明参数。
答案 2 :(得分:0)