Ho una funzione statica con la seguente firma per un tipo generico T
presunzione di un tipo generico da un tipo generico in Java (compilazione errore di tempo)
public static<T> List<T> sortMap(Map<T, Comparable> map)
che dovrebbe restituire un elenco di chiavi mappa con alcune proprietà .
Ora voglio passare un HashMap generica di tipo S
Map<S,Double> map
nel chiamare la funzione statica all'interno di una classe generica, che ha la mappa come una variabile membro.
Ho elencato un esempio di codice minimo di seguito.
Tuttavia, ricevo un messaggio di errore (S
e T
sono entrambi T ma in ambiti diversi del mio codice, vale a dire 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>)
Come si può risolvere questo problema? Sono sorpreso che Java non consenta di inferire un tipo generico da un tipo generico. Quale struttura in Java si può usare per lavorare con quel tipo di ragionamento più astratto del codice?
Codice:
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
}
}
Si prega di mostrare il codice della classe il pubblico. I metodi –
'' static'' non possono accedere alle variabili membro; e quale versione di java usi? –
Penso che dovrai aggiungere altro codice per capire il problema. –