3

配列でジェネリック型を使用するようにプログラムを変換するように求められました。

どこから始めればよいかわかりません。配列をジェネリックに変換しようとしましたが、問題が発生し続けます。

を使用して配列をジェネリックに変換しようとしましたqueArray = (T[]) (new Comparable[maxSize]);が、すべての変数を変更してジェネリック型を使用すると仮定した後、エラーが発生し続けます。

ここで何を変更する必要がありますか?

4

3 に答える 3

3

Tを実装する必要があることを宣言しますComparablePriorityQこれにより、が順序付けのために比較できるクラスのみをサポートできることを明示的に述べることができます。これは次のように行われます。

class PriorityQ<T extends Comparable<T>>

は type のインスタンスを順序付けているため、の配列として編集するqueArray必要があります。newTPriorityQT

queArray = new T[maxSize];  

最後に、Comparable.compareTo比較に次のメソッドを使用します。

if( item .compareTo(queArray[j]) > 0 )      // if new item larger,
于 2012-10-17T05:25:37.460 に答える
2

あなたが何を望んでいるのかは不明ですが、私は推測します...

タイプに境界を設定します(編集済み - was でしたが<T extends Number>Number実装していませんComparable):

class PriorityQ<T extends Number & Comparable<T>>

メソッドを returnTに変更します。例:

public T peekMin()

次に、Long実装のために、次のようにします。

PriorityQ<Long> pqLong = new PriorityQ<Long>(9);
于 2012-10-17T05:22:51.263 に答える
1

以下を更新して、

  thePQ.insert(30L);
  thePQ.insert(50L);
  thePQ.insert(10L);
  thePQ.insert(40L);
  thePQ.insert(20L);
于 2012-10-17T05:23:02.953 に答える