假设我有一个界面:
public interface Foo { public void setId(int id); public int getId(); }
以及实现该接口的对象:
public class Bar implements Foo { ... } ;
我希望有一个通用函数,它以Map<Id, Foo>
.
我还希望将成员变量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>
。我也不能将前者投给后者。
我将如何做到这一点?