2017-06-02 6 views
0

キューとプロダクトでは、キュー内に整数としてプロダクトを置く代わりに、ジェネリッククラスを使用してより一般的に格納する必要がある問題を解決しようとしています。しかし、クラス名に汎用ビットを追加することとは別に、私は何をすべきか分かりません。クラスをジェネリック型に変更する

製品クラス:

public class Product{ 
    private int barcode; 

    public Product(int barcode){ 
     this.barcode = barcode; 
    } 
} 

そして、有界キューのクラス:

public class BQ{ 
    private final int[] elements; 
    private int number, begin, end; 

public BQ(int size) { 
    elements = new int[size]; 
    number = 0; 
    begin = 0; 
    end = 0; 
} 

public void add(int item) { 
    ... 
} 

public int remove(){ 
    ... 
} 

public boolean isEmpty(){ 
    return number == 0; 
} 

}

私はProductクラスを変更し起動するには:私の知る限りとしてpublic class Product<T> このクラスでは何も変わっていないことを知っています。バーコード属性を除いて、他には何もありません。

今、私はBQクラスの問題に遭遇しています。

心に来た最初のステップはにクラスを変更しました:public class BQ<Product>

このコードはまだ実行しますが、私はそれは難しい、これはこれで全部実際にある信じることを見つけます。私が知りたいことは、タイプを使用することからだけでなく、これが何の利点であるかということです。

+0

私はあなたがしようとしているものは得られません。あなたは 'バーコード'を 'T 'として設定していますか?そうでない場合、あなたが言ったように、あなたはそれを必要としません。次に、 'BQ'では' Product'をどこで使用していますか?そして 'public class BQ 'はあなたが望むものではありません。これはGeneric BQクラスを作成し、 'Product'とは何も関係ありません。私は 'BQ 'のような 'BQ'ジェネリックを作成し、要素ilke' T [] 'を設定したいと思います。 – AxelH

+0

現在、製品は整数としてキューに入れられていますが、商品として保存する必要があります。だから 'バーコード'は 'T'にはならないだろうが、クラス全体がそうであろう。しかし、私はこれで完全に間違っている可能性があります – mtbrands

+0

あなたが望むものが、それらの '整数 'を以前にキューに格納するインスタンス' Product'を作成することであれば。ジェネリックは必要ありません...キューにそれらのインスタンスを格納したい場合は、一般的なものは必要ありません。どのようなタイプのバーコードがありますか?あなたのプロジェクトをバランスよくデザインすることができます。タイプ(コード128、コード39、...)に応じて、BarCodeのクラスを複数用意したいと思うかもしれません。 – AxelH

答えて

1

パラメータ化のポイントがありませんProduct - それはBQ汎用アイテムに使用します。

まず、キューをBQ<T>と定義し、Tを「保持するアイテムの種類」と考えてください。今

、あなたはもはやint Sを保持したいが、今T[] elementsに「何でも必要なタイプ」(すなわちT)、あなたの最初の変更int[] elementsを保存したいので、 - 「どんなタイプを保存する - それはあなたが達成したかったセマンティック変更です"intの代わりに。かなり簡単でなければなりません -

その後、あなたは今、代わりにint Sの種類Tの項目を期待するために、この配列(addなど)で動作するすべてのメソッドを調整する必要があります。

これは、BQクラスで行う必要があります。このクラスを使用して商品を保存するには、次のようにインスタンス化します:

BQ<Product> productQueue = new BQ<Product>(size); 
関連する問題