Mam problem z ograniczonymi zagnieżdżonymi symbolami wieloznacznymi w generycznych elementach Java.Zagnieżdżony element wieloznaczny w języku Java nie będzie kompilowany
Oto częsty przypadek:
public void doSomething(Set<? extends Number> set) {}
public void callDoSomething() {
Set<Integer> set = new HashSet<Integer>();
doSomething(set);
}
Jest to standardowe leki generyczne Java, działa dobrze.
Jeśli jednak wieloznaczny zostaje zagnieżdżona, to już nie działa:
public void doSomething(Map<String, Set<? extends Number>> map) {}
public void callDoSomething() {
Map<String, Set<Integer>> map = new HashMap<String, Set<Integer>>();
doSomething(map);
}
Prowadzi to do błędu kompilatora.
Próbowałem różnych odlewów i permutacji wieloznacznych, ale nie mogę tego uruchomić. Nie przypominam sobie, aby już wcześniej widziałem tę kwestię i od lat pracuję z lekami generycznymi. Czy jestem zbyt zmęczony i brakuje mi czegoś oczywistego?
Jest wyjaśnienie dla tego w najczęściej zadawanych pytaniach Java Generics: http://www.angelikalanger.com/GenericsFAQ/FAQSections /TypeArguments.html#FAQ104 –