2016-10-25 3 views
0

Я читал о CompareTo в Java, у меня есть этот код:использование CompareTo в Java

import java.util.Comparator; 

public class Test { 

    Comparator<String> caseInsensitive= new Comparator<String>() { 
     @Override 
     public int compare(String s, String b) { 
      return s.compareTo(b); 
     } 
    }; 

    public static void main(String[] args) { 

     Test t = new Test(); 
     System.out.println(((Comparator<String>) t).compare("baba","baba")); 

    } 

} 

Когда я запускаю его я получаю следующее сообщение об ошибке:

Exception in thread "main" java.lang.ClassCastException: Test cannot be cast to java.util.Comparator 
    at Test.main(Test.java:15) 

Как это исправить ?

+0

Обратите внимание, что бросает, в то время как * иногда * необходимо, это немного кода запаха , Если вы вставили бросок, потому что он сказал, что символ 't.compare' не может быть найден, это потому, что его не удалось найти. Сначала вы должны понять сообщения об ошибках, прежде чем пытаться обойти их. –

+0

«Я читал о compareTo в java», вы знаете, что на самом деле вы не используете 'compareTo' в этом коде? :) –

ответ

3

Класс Test не реализует Comparator<String>, поэтому его нельзя отнести к этому типу. Он содержит элемент, который реализует этот интерфейс.

Это будет работать:

System.out.println(t.caseInsensitive.compare("baba","baba")); 

Или вы можете изменить свой Test класс для реализации Comparator<String> непосредственно:

public class Test implements Comparator<String> { 

    @Override 
    public int compare(String s, String b) { 
     return s.compareTo(b); 
    } 

    public static void main(String[] args) { 
     Test t = new Test(); 
     System.out.println(t.compare("baba","baba")); 
    } 

} 
+0

будет работать, но не будет делать то, что его имя говорит ... 'compare' метод return должен быть' return s.compareToIgnoreCase (b); 'или' return s.toLowerCase(). CompareTo (b.toLowerCase()) ; 'быть последовательным –

+1

@JordiCastilla Это правда – Eran

+0

это означает, что когда у меня есть такой метод:' public int compare (String s, String b) {'тогда мне нужно реализовать' Comparator '? – Joe