【问题标题】:What role is <T> playing in this definition of ShoppingBasket class?<T> 在 ShoppingBasket 类的定义中扮演什么角色?
【发布时间】:2018-09-13 04:06:40
【问题描述】:

我是否正确理解&lt;T&gt; 仅指可放入 ShoppingBasket 类的一般数据类型?

public class ShoppingBasket<T> implements allBags<T>

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

我会选择去吗

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

构造函数/getter/setter 等等?我不想使用 arrayList 只是一个容量有限的数组,因为我们还没有真正了解 Java 中的动态数组。这两种方法将如何影响我编写的代码,尤其是关于我的构造函数?

【问题讨论】:

  • allBags里面有哪些方法?通常,如果一个接口是泛型的,它的一些方法会以某种形式或方式引用T
  • 是的,它确实有引用 T 的方法,其中大多数只是对包的常见操作,如 checkFull、checkEmpty、empty、add 等。

标签: java arrays generics


【解决方案1】:

是的,&lt;T&gt; 是一个类型参数,ShoppingBasket&lt;T&gt; 声明了一个泛型类型。如果你不希望ShoppingBasket 是通用的,你可以这样声明:

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

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

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

你必须实现你的 ShoppingBasket 类才能有一个方法

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2023-03-20
    相关资源
    最近更新 更多