2017-06-02 53 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; 
} 

}

要開始我改變了產品類:public class Product<T> 至於我知道這堂課沒有什麼需要改變的。除了條碼屬性之外,其他地方沒有其他的東西。

現在我遇到了BQ類的問題。

浮現在腦海的第一個步驟是將類更改爲:public class BQ<Product>

此代碼仍然執行,但我很難相信這其實是所有有給它。我也想知道的是,除了使用類型之外,這些變化有什麼區別?這有什麼優勢?

+0

我不明白你想要做什麼。你是否將'條形碼'設置爲'T'?如果沒有,就像你說的那樣,你不需要它。那麼,在'BQ'中,你在哪裏使用Product? '公共類BQ '不是你想要的,這將創建一個通用的BQ類,與'Product'無關。我想你只是想創建'BQ'通用類似'BQ ',設置元素爲'T']' – AxelH

+0

現在產品以整數形式放入隊列中,但它們應該作爲產品存儲。所以'條形碼'不會成爲'T',但整個班級都會。但是我完全可能在這個錯誤 – mtbrands

+0

如果你想要創建一個實例'產品'來存儲那些先前在隊列中的「整數」。你不需要通用的...如果你想然後將這些實例存儲在隊列中,你不需要通用的...'條形碼'可以具有什麼類型?它在我看來,你有項目的禿頭設計,你可能需要根據類型(代碼128,代碼39,...)具有多個「BarCode」類。 – AxelH

回答

1

沒有參數化Product - 這是BQ你想用於通用項目。

因此,您首先將隊列定義爲BQ<T>並將T設想爲「任何類型的項目,我螞蟻保持」。

現在,因爲你不再需要保存int秒,但現在要保存「任何類型的需要」(即T),你第一個變化int[] elementsT[] elements - 這就是你想要完成的語義變化 - 存儲「任何類型「而不是int s。

然後,你必須調整所有與此陣列(add等)合作,目前預計T型,而不是int S的項目的方法 - 這應該是相當簡單的。

而這應該是所有你需要做的BQ類。現在,使用這個類來存儲產品,你可以像這樣實例化:

BQ<Product> productQueue = new BQ<Product>(size);