java - 将类更改为泛型类型

标签 java generics

我正在尝试解决一个问题,在队列和产品中,我需要使用泛型类更普遍地存储它们,而不是将产品作为队列中的整数。但除了将通用位添加到类名之外,我不知道该怎么做。

产品类别:

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[] elementsT[] elements - 这就是您想要完成的语义更改 - 存储“任何类型”而不是 int s。

然后,您必须调整使用此数组的所有方法(add 等),以现在期望类型为 T 的项目。而不是int s - 这应该相当简单。

这应该就是您在BQ中需要做的全部事情。类(class)。现在,要使用此类来存储产品,请像这样实例化它:

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

关于java - 将类更改为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327426/

相关文章:

java - 如何在java中编码以使用cygwin在Windows环境中运行内部使用rSync的unix shell脚本?

java - react 流与非阻塞 I/O 有何不同?

c# - Web 服务中的通用类型 WebMethod

c# - 是否可以强制类型参数在类上可以为空

c# - 将参数传递给模板化类型的 C# 泛型 new()

c# - 表达式<Action<T>> 方法调用

java - 如何使用 Maven 导入 Confluence API?

java - 将数据从多个线程发送到单个线程

java - @ControllerAdvice 类中的信息传递到哪里

ios - 如果泛型类需要子类,则找不到协议(protocol)初始化