Genéricos: ¿Cómo poblar un mapa a partir de arreglos?
Intenté escribir un método de utilidad que llenara un mapa a partir de una matriz de clave y valor, independientemente del tipo de datos de la clave y el valor.
public static <k,v> Map<k,v> fillMap(Map<k,v> map, K[] keys, V[] values) {
int l= keys.length;
for (int i=0; i<l; i++)="" map.put(keys[i],="" values[i]);="" return="" map;="" }="" ```="" luego="" llamé="" al="" método="" con:="" ```java=""></l;><integer, string=""> map= new HashMap<>();
Integer[] keys= IntStream.range(0, 12).boxed().toArray(Integer[]::new);
String[] values= new String[] {"Jan","Feb","Mar","Apr","Mai","Jun",
"Jul","Aug","Sep","Okt","Nov","Dez"};
map= MyUtil.fillMap(map, keys, values);
y recibí el error:
incompatible types: no instance(s) of type variable(s) K,V exist so that Map<k,v> conforms to HashMap<integer,string>
Todos los intentos de reemplazar <k,v>
por variaciones de <? extends Object>
y similares han fallado hasta el momento.
¿Cómo se puede solucionar esto?</k,v></integer,string></k,v></integer,></k,v></k,v></k,v>
davy.ai
El error ocurre porque la firma del método declara que puede aceptar cualquier tipo de claves y valores, pero cuando se llama al método, se pasan los tipos específicos Integer y String para el HashMap.
Para solucionar esto, la firma del método se puede cambiar para declarar explícitamente los tipos de claves y valores que debe aceptar:
Esto debería convertir correctamente el Map en un HashMap con claves Integer y valores String.</integer,></integer,></k,v></k,v></k,v>