0

これは私が使用しているコンパレータです:

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 は最初の単語ではなく2番目の単語に従ってソートされます。しかし、コンパイルすると、StringComparator が抽象メソッドの compare(Object, Object) エラーをオーバーライドしないだけです。なぜそれが私にそのエラーを与えているのですか? ...

4

2 に答える 2

6

Comparator 宣言からジェネリック パラメータを省略しました。

public class StringComparator implements Comparator<String>
//                                                     ^
//                you need this!                       |
// ----------------------------------------------------
于 2013-03-11T21:59:31.987 に答える
3

コンパレータは汎用インターフェイスであり、それを に定義しなかったためComparator<String>、最も一般的な定義にフォールバックします。Comparator<Object>つまり、パラメータは であり、 でObjectsはありませんStrings

に変更します

public class StringComparator implements Comparator<String> {

そして、それは問題なくコンパイルされるはずです。

于 2013-03-11T22:01:52.967 に答える