gpt4 book ai didi

java - 泛型和 TreeSet

转载 作者:行者123 更新时间:2023-12-01 16:40:01 24 4
gpt4 key购买 nike

使用泛型绝对是我的弱点,并且需要一些帮助。

该项目旨在开发一个简单的订单/库存系统,用于下订单、跟踪商品和库存,并记录自项目首次启动以来的所有库存和客户添加/删除。这需要读取和写入文件,我选择了 CSV 格式来解析。有两个文件需要解析,一个为 Customers和一个 Items .

我想使用 TreeSet 来添加/搜索 log N,但我的文件解析遇到了一些问题。我不想让两个具有重复代码的类为其对象类型工作,而是希望有一个解析类在执行时接收集合和文件路径,并将文件处理成完整的对象集,这两个对象都有不同的字段和方法。

我想出的唯一解决方案是 TreeSet<? extends Object> ,但这意味着我必须对结构中访问的每个对象进行装箱,然后取消装箱。

有没有更简单的方法?

最佳答案

以下是您的层次结构的示例

class CVSParser<T> {
private final RecordHandler<T> handler;

public CVSParser<T>(RecordHandler<T> handler) {
this.handler = handler;
}

public Set<T> parse(File f) {
Set<T> records = new TreeSet<T>();
for (String line : file ) { //I'm paraphrasing here
records.add(handler.parse( splitIntoFields(line) ));
}
}
}

interface RecordHandler<T> {
public T parse(String[] fields);
}

class CustomerHandler implements RecordHandler<Customer> {
public Customer parse(String[] fields) {
return new Customer(fields[0], fields[1]);
}
}

class ItemHandler implements RecordHandler<Item> {
//...
}

Set<Item> items = new CVSParser<Item>(new ItemHandler()).parse(itemsFile);

或者,您可以将泛型下推到 CVSParser 的方法级别,甚至使其静态:

class CVSParser {
public static <T> Set<T> parse(RecordHandler<T> handler, File f) {
//...
}
}


Set<Item> items = CVSParser.parse(new ItemHandler(), itemsFile);

关于java - 泛型和 TreeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866559/

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