【发布时间】:2021-04-10 14:11:12
【问题描述】:
有没有办法实现这样的目标?这段代码和我想要实现的类似。
public static void main(String[] args){
MultiCall(new HashMap<Integer, Integer>(){{
put(1, 2);
put(3, 4);
}}, (i, j) -> {
System.out.println(i + j);
});
}
public void MultiCall(HashMap<?, ?> map, BiConsumer<? super ?, ? super ?> func){
...
map.forEach(func);
}
这里的问题是BiConsumer,我需要通配符是HashMap的通配符的super。
linter 是这么说的
Required type: BiConsumer <? super capture of ?, ? super capture of ?>
但是,在执行? super ? 时,说它需要是一个类型。但目前 Type 是通配符。
【问题讨论】:
-
旁注:Double brace initialization is bad. 避免这样做。从 Java 9 开始,您可以改写为
Map.of(1, 2, 3, 4)。 -
我明白了,我也不知道它会造成内存泄漏。谢谢
标签: java generics parameters wildcard