我在使用此代码时遇到编译器错误:
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/