使用泛型的静态方法重载

ase*_*a38 8 java generics

在我尝试创建两个静态重载方法的地方,我遇到了编译错误.谁能解释一下呢

public class A {
 public static void a(Set<String> stringSet) {}
 public static void a(Set<Map<String,String>> mapSet) {}
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*oyd 16

原因是类型擦除.泛型不存储在类中,它们只是编译时信息,因此在运行时,这两种方法是相同的,因此存在命名冲突.

参考

这三种方法实际上是相同的(读取:它们产生相同的字节码):

public static void a(Set plainSet) {}
public static void a(Set<String> stringSet) {}
public static void a(Set<Map<String,String>> mapSet) {}
Run Code Online (Sandbox Code Playgroud)

如果您确实想要两个单独的方法,则必须提供不同的方法签名(例如,不同的方法名称,其中一个方法的附加参数等)