Почему этот компаратор строк не компилируется?
Это компаратор, который я использую:
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! |
// ----------------------------------------------------