#java #subclass
#java #подкласс
Вопрос:
Я пытаюсь подкласс ConcurrentSkipListMap и установить его компаратор без какой-либо блокировки. Вот что у меня есть :
// 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:
Второй конструктор — мусор. Удалите его.
И ваш код не компилируется, потому что вы создаете очередь с MYCLASS в качестве ключа и Integer в качестве значения, но предоставляете компаратор, который сортирует экземпляры Integer вместо экземпляров MYCLASS.
Я предполагаю, что то, что вы хотите, — это целое число в качестве ключа. Если это так, то тип очереди должен быть Queue .
Или вы могли бы соблюдать соглашение о размещении ключа первым, а значения — после, и изменить объявление очереди на
public class Queue<K, V> extends ConcurrentSkipListMap<K, V> {
Обратите внимание, что обычно это плохая идея для подклассов коллекций. Обычно лучше инкапсулировать коллекцию в объект.