当前位置: 首页 > 知识库问答 >
问题:

参数的Java通配符

钱志强
2023-03-14

有办法实现这样的事情吗?这段代码与我想要实现的类似。

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?,表示它需要是一种类型。但该类型当前是通配符。

共有1个答案

莘欣怿
2023-03-14

您需要通过为映射的键和值类型添加类型参数来使方法泛型化:

public <K, V> void MultiCall(
    HashMap<K, V> map,
    BiConsumer<? super K, ? super V> func){
 类似资料:
  • 是否可以使参数验证集与通配符一起工作? 我希望在位置接受0-100。 错误消息: 无法验证参数“variable”得参数.参数“6.1.1.0”不属于集合“6.1...”由ValidateSet属性指定。提供一个集合中的参数,然后重试该命令。+CategoryInfo:InvalidData:(:)[],ParentContainsErrorRecordException+FullyQualifi

  • 问题内容: 我正在刷新有关Java泛型的知识。因此,我转向了Oracle的优秀教程……并开始为我的同事编写一个演示文稿。我在本教程中遇到了有关通配符的部分,内容为: 考虑以下方法,printList: printList的目标是打印任何类型的列表,但未能实现该目标- 它仅打印Object实例的列表;它不能打印,,,等等,因为它们不是的亚型。要编写通用的printList方法,请使用: 我知道那是行

  • 我正在刷新我关于Java泛型的知识。所以我转向甲骨文的优秀教程...并开始为我的同事准备一个演示文稿。我在教程中遇到了通配符部分,上面写着: 考虑以下方法,打印列表: printList的目标是打印任何类型的列表,但它无法实现该目标-它只打印对象实例的列表;无法打印列表 我明白那个

  • 我试图编写一个Spock规范,在这里我想验证一个用三个参数调用的方法。我根本不关心前两个,任何参数类型的实例都可以。我试图使用Spock通配符参数匹配,但不断遇到问题。我的验证如下所示: 这里是一个mock,UploadedPackage和PackageImportResponse.builder是预期的参数;在更改调用SaveService的代码之前,我试图先进行一个有效的测试。 我还尝试省略类

  • 我有一个API,它允许传入任何任意路径,例如所有这些: 是有效路径。我试着这样描述: 但是https://generator.swagger.io在路径中编码斜线,所以不起作用。那么有没有办法用Swagger来描述我的API呢?

  • 问题内容: 最近,我读了这篇文章:http : //download.oracle.com/javase/tutorial/extra/generics/wildcards.html 我的问题是,而不是创建像这样的方法: 我可以创建一个这样的方法,它可以正常工作: 我应该使用哪种方式?通配符在这种情况下有用吗? 问题答案: 这取决于您 需要 做什么。如果要执行以下操作,则需要使用bounded t