如何继承ConcurrentSkipListMap并设置其Comparator?

时间:2011-10-26 09:04:41

标签: java subclass

我正在尝试将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>());

如您所见,我在Queue类中添加了3个构造函数。无论我在主类中改变什么,其他构造函数都会产生错误。什么是正确的设置方法? 谢谢

1 个答案:

答案 0 :(得分:3)

第二个构造函数是垃圾。删除它。

并且您的代码无法编译,因为您使用MYCLASS作为键并使用Integer作为值来构建队列,但是提供一个比较器来排序Integer实例而不是MYCLASS实例。

我想你想要的是整数作为关键。如果是,那么队列的类型应该是Queue。

或者您可以尊重首先放置键和后面的值的约定,并将队列声明更改为

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

请注意,子类集合通常是个坏主意。将集合封装在对象中通常会更好。