Java 参数通配符

Java wildcard for parameter

有没有办法实现这样的目标?这段代码和我想实现的类似。

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,我需要wildcard是HashMap的wildcard的super

linter 是这么说的

Required type: BiConsumer <? super capture of ?, ? super capture of ?>

但是,在执行 ? super ? 后,表示它需要是一个类型。但是Type目前是一个通配符。

您需要通过为地图的键和值类型添加类型参数来使您的方法通用:

public <K, V> void MultiCall(
    HashMap<K, V> map,
    BiConsumer<? super K, ? super V> func){