我正在尝试解决队列和产品中的问题,而不是将产品作为队列中的整数,我需要通过使用泛型类来更普遍地存储它们。但除了将通用位添加到类名之外,我不知道该怎么做。
产品类别:
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 :(得分:1)
无需参数化Product
- 您希望将BQ
用于通用项目。
因此,您首先将队列定义为BQ<T>
,并将T
视为&#34;无论我持有什么类型的项目&#34;。
现在,既然您不再希望保留int
但现在想要存储&#34;无论需要什么类型&#34; (即T
),您首先将int[] elements
更改为T[] elements
- 这是您想要完成的语义更改 - 存储&#34;无论何种类型&#34;而不是int
s。
然后,您必须调整使用此数组(add
等)的所有方法,以便现在期望T
类型的项目而不是int
s - 这应该是相当简单的。
这应该是BQ
课程中你需要做的全部。现在,要使用此类来存储产品,您可以像这样实例化它:
BQ<Product> productQueue = new BQ<Product>(size);