Java 编译器与泛型错误

标签 java eclipse generics

我在使用此代码时遇到编译器错误:

Map<String, String[]> myMap;

void set(Map<String, Object> foo) { }

set(myMap); // generates error

Error: "The method set(Map<String,Object>) in the type XXX is not applicable for the arguments (Map<String,String[]>)"

这对我来说毫无意义,因为 String[] 实际上是一个对象,并且与 set() 中的参数完全兼容。

直到我从 JDK 1.6 升级到 1.7 后,此错误才出现在我的代码中。我在 Eclipse 中没有看到用于关闭它的开关。我如何编译此代码?

编辑:

如果我使用中间变量并删除泛型,它会编译:

Map anotherMap = myMap;
set(anotherMap);

最佳答案

泛型继承和我们常规理解的OO继承不同。请阅读此tutorial .

要使代码编译,您可能需要更改方法语法,如下所示:

void set(Map<String, ?> foo) { }

编辑:正如 dasblinkenlight 评论的那样,如果您计划在 set 方法中对 Map 进行修改,那么除非您定义了具体类型,否则它将无法工作。

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

相关文章:

java - 使用正则表达式在 Java 中查找并替换字符串中的十六进制值

java - jUnit - 建议

java - 我用 MediaRecorder 录制的文件无法播放

java - 通用数组创建错误

C# 如何解决 Func<T, bool> 中的逆变问题?

delphi - 我可以限制(编译或运行时)泛型为 char 数组 [0..n]

java - JSR 验证 @Pattern 允许空值

java - Dockerfile 中的打包步骤是下载依赖项,尽管前面有一个步骤来解决依赖项

java - 使用GGTS从Eclipse到Grails的JAVA BOX SDK

java - 在 Java 循环中声明重复变量