Der Grund ist type erasure. Generics werden nicht in den Klassen gespeichert, sie sind nur Informationen zur Kompilierung, daher sind die beiden Methoden zur Laufzeit identisch und daher gibt es einen Namenskonflikt.
Referenz
Diese drei Methoden tatsächlich identisch sind (sprich: sie produzieren identisch Bytecode):
public static void a(Set plainSet) {}
public static void a(Set<String> stringSet) {}
public static void a(Set<Map<String,String>> mapSet) {}
Wenn Sie wirklich zwei separate Methoden haben möchten, müssen Sie verschiedene Methodensignaturen (z. verschiedene Methodennamen, ein zusätzlicher Parameter für eine der Methoden etc.)
Was ist der Fehler? – kasten