2010-05-08 8 views
37

Esto es lo que he intentado hacer, pero me da una advertencia:¿Cómo hacer una variedad de hashmaps?

HashMap<String, String>[] responseArray = new HashMap[games.size()]; 

Type safety: The expression of type HashMap[ ] needs unchecked conversion to conform to HashMap[ ]

Respuesta

45

Lo que da? Funciona. Ignorarlo:

@SuppressWarnings("unchecked") 

No, cannot parametrizarlo. Sin embargo, prefiero usar un List<Map<K, V>>.

List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>(); 

Para obtener más información sobre las colecciones y mapas, echar un vistazo a this tutorial.

+1

Gracias. Lo hice funcionar usando una lista de mapas. No me gusta ignorar las advertencias. Según mi experiencia, si recibes una advertencia, tú lo haces. Lo único que no entiendo es por qué lo declaro como un tipo de mapa, pero cuando realmente lo instalo tengo que usar HashMap? Map responseMap; responseMap = new HashMap (); – Joren

+0

Es una interfaz. Un plan. Un contrato. Siga el enlace :) – BalusC

+0

¿Por qué prefiere usar la Lista de mapas y luego un HashMap? Explique. – Daniel

3

No puede tener una matriz de un tipo genérico. Use List en su lugar.

+0

En realidad, puede * tener * una matriz de un tipo genérico, simplemente no puede * crear * una directamente.(No pretendo entender el razonamiento detrás de esto, pero eso es lo que dice la especificación) – meriton

5

The Java Language Specification, sección 15.10, afirma:

An array creation expression creates an object that is a new array whose elements are of the type specified by the PrimitiveType or ClassOrInterfaceType. It is a compile-time error if the ClassOrInterfaceType does not denote a reifiable type (§4.7).

y

The rules above imply that the element type in an array creation expression cannot be a parameterized type, other than an unbounded wildcard.

Lo más cerca que se puede hacer es utilizar un elenco sin control, ya sea del tipo de crudo, como lo han hecho , o de un comodín sin límites:

HashMap<String, String>[] responseArray = (Map<String, String>[]) new HashMap<?,?>[games.size()]; 

su versión es claramente mejor :-)

9

se puede usar algo como esto:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 


public class testHashes { 

public static void main(String args[]){ 
    Map<String,String> myMap1 = new HashMap<String, String>(); 

    List<Map<String , String>> myMap = new ArrayList<Map<String,String>>(); 

    myMap1.put("URL", "Val0"); 
    myMap1.put("CRC", "Vla1"); 
    myMap1.put("SIZE", "Val2"); 
    myMap1.put("PROGRESS", "Val3"); 

    myMap.add(0,myMap1); 
    myMap.add(1,myMap1); 

    for (Map<String, String> map : myMap) { 
     System.out.println(map.get("URL")); 
        System.out.println(map.get("CRC")); 
        System.out.println(map.get("SIZE")); 
        System.out.println(map.get("PROGRESS")); 
    } 

    //System.out.println(myMap); 

} 


} 
+0

Recibo un error: (19, 15) java: esperado –

4

Java no quiere que le permite tomar una serie de HashMaps, pero le permitirá realizar una gran variedad de objetos. Por lo tanto, simplemente escriba una declaración de clase como un shell alrededor de su HashMap, y haga una matriz de esa clase. Esto le permite almacenar algunos datos adicionales sobre los HashMaps si lo desea, lo que puede ser un beneficio, dado que ya tiene una estructura de datos algo compleja.

el aspecto que tiene:

private static someClass[] arr = new someClass[someNum]; 

y

public class someClass { 

private static int dataFoo; 
private static int dataBar; 
private static HashMap<String, String> yourArray; 

... 

} 
Cuestiones relacionadas