首页 > 解决方案 > 参数的 Java 通配符

问题描述

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

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 通配符的超级。

短绒布是这样说的

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

然而,在做的时候? super ?,说它需要是一个类型。但是当前类型是通配符。

标签: javagenericsparameterswildcard

解决方案


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

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

推荐阅读