2011-10-26 22 views
0

私はConcurrentSkipListMapをサブクラス化しようとしており、ロックなしでComparatorを設定しています。 は、ここで私が持っているものです。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つのコンストラクタを追加見ることができるように。メインクラスで何が変わっても、他のコンストラクタはエラーを起こします。それを正しく設定する正しい方法は何ですか? ありがとう

答えて

3

2番目のコンストラクタはゴミです。それを除く。

そして、MYCLASSをキーとして、Integerを値として持つキューを作成しますが、MYCLASSインスタンスの代わりにIntegerインスタンスをソートするコンパレータを提供するため、コードはコンパイルされません。

私はあなたが欲しいのはIntegerをキーと思います。その場合、キューのタイプはQueueでなければなりません。

それとも、キー最初と後の値を配置する慣習を尊重し、それは一般的に、サブクラスのコレクションに悪い考えだと

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

ノートにキューの宣言を変更することができます。一般的には、コレクションをオブジェクトにカプセル化する方がよいでしょう。

関連する問題