gpt4 book ai didi

java - 使用 Java 参数化类型和多态性实现这种通用编程场景的方法

转载 作者:行者123 更新时间:2023-12-02 06:41:52 25 4
gpt4 key购买 nike

假设我有一个界面:

public interface Foo { public void setId(int id); public int getId(); }

以及实现该接口(interface)的对象:

public class Bar implements Foo { ... } ;

我希望有一个通用函数来创建 Map<Id, Foo> 形式的 Map .

我也希望有像 private Map<Integer, Bar> barMap 这样的成员变量设置为此映射的返回值。

以下内容:

private <T> Map<Integer, Foo> createMap(List<? extends Foo> foos) {
Map<Integer, Foo> map = new LinkedHashMap<Integer,Foo>();
for (Foo foo : foos) {
map.put(foo.getId(), foo);
}
return map;
}

合法。

但是

List<Bar> barList = new ArrayList<Bar>();
barList.add(...);
...
Map<Integer, Bar> barMap = createMap(barList)

是非法的,因为我无法从 Map<Integer, Foo> 转换至Map<Integer, Bar> 。我也无法将前者转换为后者。

我该如何实现这个目标?

最佳答案

您应该使用 T (类型参数)-

private <T extends Foo> Map<Integer, T> createMap(List<T> foos) {
Map<Integer, T> map = new LinkedHashMap<Integer, T>();
for (T foo : foos) {

当您这样做时,您的通用方法将返回 Map<Integer, Bar> ,借助类型推断,而不是 Map<Integer, Foo> .

关于java - 使用 Java 参数化类型和多态性实现这种通用编程场景的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074220/

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