java - 参数的 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 ?
,说它需要是一个类型。但是当前类型是通配符。
解决方案
您需要通过为地图的键和值类型添加类型参数来使您的方法通用:
public <K, V> void MultiCall(
HashMap<K, V> map,
BiConsumer<? super K, ? super V> func){
推荐阅读
- sql-server - 根据 mssl1 中另一列的参数更新一列
- sql-server - MS CRM:分页 cookie 错误?
- java - 警报对话框:字符串未转换为粗体文本
- c# - 使用 openXML SAX 方法将批量数据写入 excel 模板
- amp-html - AMP-Bind input [value]:非空绑定输入框没有css作为手动输入
- wix - 蜡刻录不允许删除文件
- machine-learning - 使用预训练 ResNet50 网络的 OneClass SVM 模型
- mysql - 向列的内容添加文本?
- ruby-on-rails - 在 ActiveAdmin 上创建记录后显示信息
- java - 如何在数组中显示最近的对产品