gpt4 book ai didi

java - 使给定的 Java 类更加通用和灵活

转载 作者:行者123 更新时间:2023-12-02 00:08:03 25 4
gpt4 key购买 nike

我被安排了一个类Shop维护 T 类型的项目集合。它提供单个或多个项目的买卖功能,并使用 List<T>作为买卖的容器:

import java.util.*;

public class Shop<T> {
List<T> stock;

public Shop() { stock = new LinkedList<T>(); }
public T buy() {
return stock.remove(0);
}
void sell(T item) {
stock.add(item);
}

void buy(int n, List<T> items) {
for (T e : stock.subList(0, n)) {
items.add(e);
}
for (int i=0; i<n; ++i) stock.remove(0);
}

void sell(List<T> items) {
for (T e : items) {
stock.add(e);
}
}
}

现在,我需要修改此类,以便我可以使用任何 Collection 购买/出售元素输入...不仅仅是 List 。我想我应该首先注释掉大部分内容并尝试一一转换,从stock开始。 :

 public class Shop<T> {
// List<T> stock;
Collection<T> stock;

// public Shop() { stock = new LinkedList<T>(); }
public Shop() { stock = new Collection<T>(); }
...
...
}

第一个声明有效,但尝试在构造函数中实例化接口(interface)(如预期)不起作用。但据我所知,stock需要是 Collection这样我就可以使用任何 Collection处理它的其他函数中的子类型。我很确定在这种情况下我不能使用通配符作为类型参数。那么我到底可以做什么来构建 stock在这里...或者我应该如何声明 stock首先是不同的吗?

最佳答案

只要您的接口(interface)定义接受Collection,您在类中使用的实际集合实现对于该类的客户端/用户来说是完全无关紧要的,即

void buy(int n, List<T> items)
void sell(List<T> items)

应该是

void buy(int n, Collection<T> items)
void sell(Collection<T> items)

这不会限制任何人仅使用List类型。然后,您的内部成员 stock 可以并且应该使用 Collection 的任何具体子类型进行实例化。

关于java - 使给定的 Java 类更加通用和灵活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com