泛型的 Java Map 编译器错误

标签 java generics map

// I know that this method will generated duplicate 
// trim keys for the same value but I am just
// trying to understand why we have a compile error:
// The method put(String, capture#11-of ?) in the type
// Map<String,capture#11-of ?> is not applicable for the arguments
// (String, capture#12-of ?)

void trimKeyMap(Map<String, ?> map){
  for (String key : map.keySet()) {
    map.put(StringUtils.trim(key), map.get(key)); // compile error
  }
}

为什么我们要放入 map.get(key) 的值可以来自不同的类型?

最佳答案

问题是编译器只知道键类型是“未知”,但不知道它是相同映射键类型和从 get() 返回的类型的未知类型 (即使我们作为人类意识到它是一样的)。

如果你想让它工作,你必须通过键入你的方法告诉编译器它是相同未知类型,例如:

void <V> trimKeyMap(Map<String, V> map) {
    for (String key : map.keySet()) {
        map.put(StringUtils.trim(key), map.get(key));
    }
}

关于泛型的 Java Map 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17213301/

相关文章:

java - 使用@ExceptionHandler 提供基于@RequestMapping 的JSON 或HTML 响应

jquery - 如何在jQuery中遍历Grails映射

c - 如何在程序崩溃前检测文本文件是否损坏?

c# - 在泛型函数中使用重载的 operator==

c++ - 使用带类错误的 map ,编译错误

Java JSlider 为左右箭头键实现自己的逻辑

java - 映射结构 : enrich mapping annotation to define custom mapper

java - 递归(完成)

java - 如果 Java 不支持参数化类型数组,Arrays.asList() 如何使用它们?

java - 尝试执行通用二进制搜索时,方法不能应用于给定类型