Mam statyczną funkcję z następującym podpisem dla typu rodzajowego T
Wnioskując typ rodzajowy od typu rodzajowego w Java (błąd kompilacji czas)
public static<T> List<T> sortMap(Map<T, Comparable> map)
które powinny powrócić listę kluczy mapa z niektórych nieruchomości .
Teraz chcę przekazać rodzajowe HashMap typu S
Map<S,Double> map
w wywołaniu funkcji statycznej w ogólnej klasy, który ma mapę jako zmiennej składowej.
Podałem poniżej przykład kodu minimalnego.
Jednak pojawia się komunikat o błędzie (S
i T
są zarówno T, ale w różnych zakresach mojego kodu, tj T#1
= T
, T#2
= S
):
required: Map<T#1,Comparable>
found: Map<T#2,Double>
reason: cannot infer type-variable(s) T#1
(argument mismatch; Map<T#2,Double> cannot be converted to Map<T#1,Comparable>)
Jak można rozwiązać ten problem? Jestem zaskoczony, że Java nie zezwala na wnioskowanie typu ogólnego od typu ogólnego. Jakiej struktury w Javie można użyć do pracy z tego rodzaju bardziej abstrakcyjnym rozumowaniem kodu?
Kod:
public class ExampleClass<T> {
Map<T, Double> map;
public ExampleClass() {
this.map = new HashMap();
}
//the following line produces the mentioned error
List<T> sortedMapKeys = UtilityMethods.sortMap(map);
}
public class UtilityMethods {
public static<T> List<T> sortMap(Map<T, Comparable> map) {
// sort the map in some way and return the list
}
}
Proszę pokazać kod klasa publiczność. –
Metody 'statyczne' nie mogą uzyskać dostępu do zmiennych członkowskich; i jakiej wersji java używasz? –
Myślę, że będziesz musiał dodać trochę więcej kodu, aby zrozumieć problem. –