将类更改为泛型类型

时间:2017-06-02 11:06:44

标签: 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;
}

}

首先,我将Product类更改为:public class Product<T> 据我所知,这堂课没有什么可以改变的。除了条形码属性之外,没有任何其他内容。

现在我遇到了BQ课中的问题。

首先想到的是将课程更改为:public class BQ<Product>

此代码仍然执行,但我发现很难相信这实际上是它的全部内容。我还想知道的是,除了使用类型之外,这种变化是什么,这有什么好处?

1 个答案:

答案 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);