2015-04-30 4 views
0

Я не знаю, что я делаю неправильно, но когда я пытаюсь инициализировать значение public final Comparator<K> cmp, я получаю сообщение об ошибке.Получение ошибок при попытке использования Компаратор

public class FastGetListMM<K,V> extends AbstractListMM<K,V> { 

    // Comparator used to sort elements; may be null if elements are Comparable 
    public final Comparator<K> cmp;  
    private List<K> keys;; 
    private List<V> values; 

    // Assume elements must be comparable 
    public FastGetListMM(ArrayList<K> keys, ArrayList<V> values) 
    { 
     super(keys, values); 
     //this.cmp = new Comparator<K>(); <<----error 
    } 

    // Use the given comparator to sort the keys 
    public FastGetListMM(Comparator<K> cmp) 
    { 
     super(cmp); <<-----error 
     //this.cmp = cmp; <<----error 
    } 
+0

Какая ошибка вы получаете? –

+0

В вашем классе 'AbstractListMM' есть компаратор? – Razib

+1

'Компаратор' - это интерфейс, вы не можете создавать его непосредственно с помощью' new'. Или вам нужно создать для него анонимный класс. –

ответ

4

К этому:

this.cmp = new Comparator<K>(); 

вы пытаетесь создать экземпляр interface напрямую, что не допускается. Вы должны сначала создать класс реализации Comparator<K> или экземпляр анонимного класса, как:

this.cmp = new Comparator<K>(){ 
    @Override 
    public int compare(K k1, K k2) { 
     // compare k1 and k2 here 
    } 
} 

или назначить лямбда, как:

Comparator<K> cmp = (k1, k2) -> { /* compare k1 to k2 */ }; 

Если вы предпочитаете классы, используйте следующую идиому:

public static class MyComparator<K> implements Comparator<K> { 
    @Override 
    public int compare(K k1, K k2) { 
     // compare k1 to k2 
    } 
} 

После этого, в наружном кодексе экземпляр этого класса:

Comparator<K> cmp = new MyComparator<>(); 
+3

@JonK 'Comparator' * является * интерфейсом; см. https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html – TNT

+0

@TNT Вот что я получаю от спешки! Я собираюсь зайти и пойти домой. – JonK

+0

Я пробовал это, @SashaSalauyou, что бы я ни пытался, я получаю это 'Невозможно создать экземпляр типа Comparator '. Есть что-то, что мне нужно сделать? Должен ли я помещать 'реализация Comparator' в имя класса? –

Смежные вопросы