【问题标题】:Object used in place of interface?使用对象代替接口?
【发布时间】:2015-08-09 09:04:19
【问题描述】:

我有

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+", ");
    }
 }

有人可以给我解释一下,为什么上面程序中的参数可以用方法对象代替。谢谢

【问题讨论】:

  • 我建议你再读一遍Methods implements Comparator&lt;String&gt; ,想想这是在说什么。

标签: java collections comparator


【解决方案1】:

me 持有对Methods 类型实例的引用,该实例实现Comparator&lt;String&gt;。因此,它可以传递给一个需要Comparator&lt;String&gt; 的方法,例如Arrayssort(T[] a, Comparator&lt;? super T&gt; c)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      Arrays.sort(string1,me);
      
      • sort 方法将数组和比较器作为参数。

      由于您Methods 类实现了Comparator,因此您也可以传递一个Methods 对象。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-08-29
          • 1970-01-01
          • 2021-06-25
          • 1970-01-01
          • 1970-01-01
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多