Как создать подкласс ConcurrentSkipListMap и установить его компаратор? - PullRequest
0 голосов
/ 26 октября 2011

Я пытаюсь создать подкласс ConcurrentSkipListMap и установить его Comparator без какой-либо блокировки.Вот что у меня есть:

// the subclass 
public class Queue<V, K> extends ConcurrentSkipListMap<K, V> {

    public Queue(Comparator<? super K> queueComparator) {
        // TODO Auto-generated constructor stub
        super(queueComparator);
    }

    public Queue(QueueComparator<Integer> queueComparator) {
        // TODO Auto-generated constructor stub
        super((Comparator<? super K>) queueComparator);
    }

}
//the comparator (QueueComparator)
public class QueueComparator<T> implements Comparator<T> {

    @Override
    public int compare(T o1, T o2) {
        // TODO Auto-generated method stub
        return 0;
    }

}

// main class init the subclass

Queue queue= new Queue<Integer,MYCLASS>(new QueueComparator<Integer>());

Как видите, я добавил 3 конструктора в класс Queue.Независимо от того, что я изменяю в основном классе, другие конструкторы выдают ошибку.Как правильно это исправить?спасибо

1 Ответ

3 голосов
/ 26 октября 2011

Второй конструктор - мусор.Удалите его.

И ваш код не компилируется, поскольку вы строите очередь с MYCLASS в качестве ключа и Integer в качестве значения, но предоставляете компаратор, который сортирует экземпляры Integer вместо экземпляров MYCLASS.

Iугадайте, что вам нужно Integer в качестве ключа.Если это так, то тип очереди должен быть «Очередь».

Или вы могли бы соблюдать соглашение о размещении ключа первым и значения после и изменить объявление очереди на

public class Queue<K, V> extends ConcurrentSkipListMap<K, V> {

Обратите внимание, чтокак правило, плохая идея разбивать коллекции на подклассы.Как правило, лучше инкапсулировать коллекцию в объекте.

...