为什么没有';Java类型擦除阻止编译此代码

为什么没有';Java类型擦除阻止编译此代码,java,generics,Java,Generics,我有一个类定义了以下两种方法: public Map<String, Map<String, String>> method(final Map<String, Map<String, String>> data) public boolean method(final Map<String, String> data) 然而,这段代码在Java6中编译成功,但没有在Java8中编译 有人能告诉我为什么它可以在Java 6下编译吗?

我有一个类定义了以下两种方法:

public Map<String, Map<String, String>> method(final Map<String, Map<String, String>> data)

public boolean method(final Map<String, String> data)
然而,这段代码在Java6中编译成功,但没有在Java8中编译


有人能告诉我为什么它可以在Java 6下编译吗?

它可以在Java 6下编译,但不能在Java 7或Java 8下编译

Java5和Java6中都有一个bug

该错误页面引用了,其中说明:

如果类型声明T有一个成员方法m1,并且存在一个在T或T的超类型中声明的方法m2,则这是一个编译时错误,并且以下所有情况均为真:

  • m1和m2具有相同的名称

  • m2可从T进入

  • m1的签名不是m2签名的子签名(§8.4.2)

  • m1或某些方法m1覆盖(直接或间接)的签名与m2或某些方法m2覆盖(直接或间接)的签名具有相同的擦除

这两个方法都没有另一个的子签名,因为参数类型
Map
Map
都不是另一个的子类型。但是,它们具有相同的擦除,
Map


它本不应该编译,但Java 7修复了这个Java错误。

对不起。那是个打字错误。是的。但它使用Java6编译得很好,也不在Java7下编译。我无法尝试使用Java6。因为有一个bug?他们修好了吗?
method(Map data)