【问题标题】:Java wildcard for parameter参数的 Java 通配符
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 这很好用,谢谢。我不知道这种语法。
猜你喜欢
  • 2023-02-04
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多