gpt4 book ai didi

java - 在 Java 中为接口(interface)实例列表实现通用容器

转载 作者:行者123 更新时间:2023-12-04 10:59:15 25 4
gpt4 key购买 nike

这里是 Java 8。我有以下 POJO:

public interface HasPartNumber {
String getPartNumber();
}

@Getter
@Setter
public class InventoryItem implements HasPartNumber {
private String modelNumber;
private String description;
// lots of other fields here

@Override
public String getPartNumber() {
return this.modelNumber;
}
}

public class Inventory extends ArrayList<InventoryItem> {
// Inventory is just an alias of a list of InventoryItem
}

@Getter
@Setter
public class PriceItem implements HasPartNumber {
private String equipmentNumber;
// lots of other fields here

@Override
public String getPartNumber() {
return this.equipmentNumber;
}
}

public class PriceRoster extends ArrayList<PriceItem> {
// PriceRoster is just an alias of a list of PriceItem
}

我知道你们中的一些人可能对我的建模方式感到反感 InventoryPriceRoster ,但使用 is-a 和 has-a 黄金法则是正确的。 “库存”不仅仅是 InventoryItems 的列表。 . PriceRoster 同上.而且, Domain-Driven Design如果对阅读代码的开发人员有意义,社区可能会同意这些是有效的数据模型。

但是,我不是 已婚到这个设计。因此,虽然我的建议是将这个数据模型保持在上面,但如果在不更改数据模型的情况下真的不可能完成我在下面描述的内容,我会很灵活。

我正在尝试编写一个通用的 PartProcessor将遍历 HasPartNumber 列表的类impls 并对它们执行处理。我最好的尝试:
public class PartProcessor<PART_CONTAINER extends List<HasPartNumber>> {

public void process(PART_CONTAINER partContainer) {

partContainer.stream().forEach(part -> {

// Do something here

});

}

}

当我去实例化 PartProcessor 时产生编译错误:
PartProcessor<Inventory> inventory = new PartProcessor<Inventory>();

我看到的编译器错误是:

"Type parameter 'com.example.myapp.Inventory' is not within its bound; should implement 'java.util.List<com.example.myapp.HasPartNumber>'"



任何想法我可以做些什么来获得我的 PartProcessor一般处理 HasPartNumbers 的任何列表impl,包括 InventoryPriceRoster ?

最佳答案

有界类型使类型协变:

 public class PartProcessor<PART_CONTAINER extends List<? extends HasPartNumber>> {... 

如需更广泛的阅读,请参阅 this answer also .

关于java - 在 Java 中为接口(interface)实例列表实现通用容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940692/

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