Почему этот компаратор строк не компилируется?

Это компаратор, который я использую:

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 );
        }
    }
}

Я в основном пытаюсь сделать компаратор, чтобы сортировки collection.sort сортировались по второму слову, а не по первому. Но когда я его компилирую, все, что я получаю, это то, что StringComparator не переопределяет ошибку сравнения абстрактного метода (Object, Object). Почему это дает мне эту ошибку?...

2 ответа

Решение

Потому что компаратор является универсальным интерфейсом, и поскольку вы не определили его как Comparator<String> это возвращается к самому общему определению, Comparator<Object> что означает, что параметры должны быть Objects и не Strings,

Измените это на

public class StringComparator implements Comparator<String> {

и это должно скомпилироваться просто отлично.

Вы пропустили универсальный параметр из объявления Comparator.

public class StringComparator implements Comparator<String>
//                                                     ^
//                you need this!                       |
// ----------------------------------------------------
Другие вопросы по тегам