<t>在ShoppingBasket类的此定义中扮演什么角色?

时间:2018-09-13 04:06:40

标签: java arrays generics

我是否正确理解<T>只是指可以在ShoppingBasket类中使用的常规数据类型?

public class ShoppingBasket<T> implements allBags<T>

如果我想定义一个shoppingBasket类,该类实现一个称为allBags的通用接口,并且在该shoppingBasket中,我希望有一个可以通过int ID识别的水果数组(我用一个包含它的int数据字段创建了Fruit类。具有相关方法的ID)如何在不使用泛型的情况下做到这一点?

我愿意吗

public class ShoppingBasket implements allBags{
private Fruit[] fruitBasket;

,等等,构造函数/ getters / setters?我并不是要使用arrayList来处理容量有限的数组,因为我们还没有真正了解Java中的动态数组。这两种方法将如何影响我编写的代码,尤其是对我的构造函数而言?

1 个答案:

答案 0 :(得分:3)

是的,<T>是类型参数,ShoppingBasket<T>声明了泛型类型。如果您不希望ShoppingBasket通用,则可以这样声明:

public class ShoppingBasket implements allBags<Fruit> {
    ...
}

将与任何非泛型类一样声明和实现构造函数和访问器。无论接口在何处使用allBags,都必须使用Fruit定义在T接口中声明的所有方法。因此,例如,如果allBags的声明如下:

public interface allBags<T> {
    ...
    void addItem(T item);
}

您将必须实现ShoppingBasket类以拥有方法

@Override
public void addItem(Fruit item) { ... }

(您可以选择将参数从item重命名为其他名称,但其余签名必须如图所示。)