Java嵌套通配符generics将无法编译

我在Javagenerics中遇到有界嵌套通配符的问题。

这是一个常见的情况:

public void doSomething(Set set) {} public void callDoSomething() { Set set = new HashSet(); doSomething(set); } 

这是标准的Javagenerics,工作正常。

但是,如果通配符变为嵌套,则它不再起作用:

 public void doSomething(Map<String, Set> map) {} public void callDoSomething() { Map<String, Set> map = new HashMap<String, Set>(); doSomething(map); } 

这会导致编译器错误。

我尝试了各种演员表和通配符排列,但我无法使其正常工作。 我不记得以前看过这个问题了,多年来我一直在使用仿制药。 我是否太累了,错过了一些明显的东西?

所以问题是, doSomething可以实现为:

 public void doSomething(Map> map) { Set set = ...; map.put("xyz", set); } 

你需要决定你的意思。

可能类似于:

 public void doSomething(Map> map) {} 

这对你有用:

 public void doSomething(Map> map) {} 

使代码工作创建HashMap为:

 Map> map = new HashMap>();