我正在尝试解决一个问题,在队列和产品中,我需要使用泛型类更普遍地存储它们,而不是将产品作为队列中的整数。但除了将通用位添加到类名之外,我不知道该怎么做。
产品类别:
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>
这段代码仍然会执行,但我很难相信这实际上就是它的全部内容。我还想知道除了使用类型之外,这还改变了什么,它的优点是什么?
最佳答案
参数化没有意义 Product
- 这是BQ
您想用于通用项目。
所以你首先将队列定义为 BQ<T>
并想到 T
作为“我想要持有的任何类型的元素”。
现在,既然你不再想持有 int
但现在想要存储“所需的任何类型”(即 T
),您首先更改 int[] elements
至T[] elements
- 这就是您想要完成的语义更改 - 存储“任何类型”而不是 int
s。
然后,您必须调整使用此数组的所有方法(add
等),以现在期望类型为 T
的项目。而不是int
s - 这应该相当简单。
这应该就是您在BQ
中需要做的全部事情。类(class)。现在,要使用此类来存储产品,请像这样实例化它:
BQ<Product> productQueue = new BQ<Product>(size);
关于java - 将类更改为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327426/