【问题标题】:Why does this string comparator not compile?为什么这个字符串比较器不编译?
【发布时间】:2013-02-27 06:34:18
【问题描述】:

这是我正在使用的比较器:

import java.util.Comparator;

public class StringComparator implements Comparator
{
    public int compare(String obj1, String obj2) 
    {
        String delimeter = " ";
        String nameSplit1[] = obj1.split( delimeter );
        String nameSplit2[] = obj2.split( delimeter );

        return nameSplit1[1].compareTo(nameSplit2[1]);
    }
}

这是主文件:

import java.util.*;

public class StringCompare
{
    public static void main( String args[] )
    {
        List<String> stringList = new ArrayList<String>();
        String delimeter = " ";

        stringList.add( "Seven Clocks" );
        stringList.add( "Twelve Beds" );
        stringList.add( "Eight Frogs" );


        Collections.sort( stringList, new StringComparator() );

        for ( String a : stringList )
        {
            System.out.println( a );
        }
    }
}

我基本上是在尝试制作一个比较器,以便 collections.sort 根据第二个单词而不是第一个单词进行排序。但是当我编译它时,我得到的只是 StringComparator 不会覆盖抽象方法 compare(Object, Object) 错误。为什么它给我这个错误?...

【问题讨论】:

  • 你应该使用泛型。
  • compare(String, String) 不会覆盖 compare(Object, Object),这是来自非泛型 Comparator 的预期比较方法
  • 较早的 rawtypes 警告(假设 JDK 7)应该放弃游戏。 @Override 会有所帮助。
  • 编译会产生变化,如果您正在查看一个字节码以与另一个字节码进行比较,最好使用二进制十六进制编辑器。

标签: java string object compare comparator


【解决方案1】:

您在 Comparator 声明中遗漏了泛型参数。

public class StringComparator implements Comparator<String>
//                                                     ^
//                you need this!                       |
// ----------------------------------------------------

【讨论】:

    【解决方案2】:

    因为比较器是一个通用接口,并且由于您没有将其定义为 Comparator&lt;String&gt;,所以它使用最通用的定义 Comparator&lt;Object&gt;,这意味着参数应该是 Objects 而不是 @987654324 @。

    改成

    public class StringComparator implements Comparator<String> {
    

    它应该编译得很好。

    【讨论】:

      猜你喜欢
      • 2015-05-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2015-06-13
      相关资源
      最近更新 更多