用于代替接口的对象?

时间:2015-08-09 09:04:20

标签: java collections comparator

我有

public class Methods implements Comparator<String> {


public int compare(String std1,String std2)
{
    return std1.compareTo(std2);
}

public static void main(String[] args) {

String[] string1={"Quan","Ha","Khai","Long","Han"};

    Methods me=new Methods();
    Arrays.sort(string1,me);// Arrays.sort(Object[] array,Comparator comp), me is Methods, not Comparator, but the Program also work well
    System.out.println("Descending in string1: ");
    for(String e: string1)
    {
        System.out.print(e+", ");
    }
 }

有人可以向我解释,为什么参数可以被上面程序中的方法对象替换。谢谢

4 个答案:

答案 0 :(得分:3)

me包含对Methods类型实例的引用,该实例实现Comparator<String>。因此,可以将其传递给期望Comparator<String>的方法,例如Arrays&#39; sort(T[] a, Comparator<? super T> c)

答案 1 :(得分:1)

Methods实现Comparator接口,因此它也具有该接口的类型。

答案 2 :(得分:1)

Arrays.sort(string1,me);
  • sort方法将数组和比较器作为参数。

由于您Methods类实现了Comparator,您也可以传递方法的对象。

答案 3 :(得分:1)

当你做Arrays.sort(string1,me)排序方法所期望的第二个参数是比较器,在你的情况下是方法。现在比较器内部调用compare方法并将结果最终传递给第一个参数,该参数只是一个排序列表