Saltar al contenido

¿Cómo se instancia una array de mapas en Java?

Este escrito fue analizado por nuestros expertos así se asegura la veracidad de este tutorial.

Solución:

No es estrictamente una respuesta a su pregunta, pero ¿ha considerado usar un List ¿en cambio?

List> maps = new ArrayList>();
...
maps.add(new HashMap());

parece funcionar bien.

Consulte Teoría y práctica de Java: trampas genéricas para obtener una explicación detallada de por qué se desaconseja mezclar matrices con genéricos.

Actualizar:

Como mencionó Drew en los comentarios, podría ser incluso mejor usar la interfaz de Colección en lugar de List. Esto puede ser útil si alguna vez necesita cambiar a un Seto una de las otras subinterfaces de Collection. Código de ejemplo:

Collection> maps = new HashSet>();
...
maps.add(new HashMap());

Desde este punto de partida, solo necesitaría cambiar HashSet para ArrayList, PriorityQueueo cualquier otra clase que implemente Collection.

No se puede crear con seguridad un genérico array. La segunda edición efectiva de Java entra en detalles en el capítulo sobre Genéricos. Comience en el último párrafo de la página 119:

¿Por qué es ilegal crear un genérico?
array? Porque no es typesafe. Si fuera legal, las conversiones generadas por el compilador en un programa correcto podrían fallar en tiempo de ejecución con un
ClassCastException. Esto violaría la garantía fundamental proporcionada por el sistema de tipo genérico.

Para hacer esto más concreto, considere el siguiente fragmento de código:

// Why generic array creation is illegal - won't compile!
List[] stringLists = new List[1]; // (1)
List intList = Arrays.asList(42); // (2)
Object[] objects = stringLists; // (3)
objects[0] = intList; // (4)
String s = stringLists[0].get(0); // (5)

Supongamos que la línea 1, que crea un genérico array, es legal. La línea 2 crea e inicializa un
List que contiene un solo elemento. La línea 3 almacena el
List array en una Object
array variable, lo cual es legal porque las matrices son covariantes. La línea 4 almacena el List en el único elemento de la Object arrayque tiene éxito porque los genéricos se implementan mediante borrado: el tipo de tiempo de ejecución de un List instancia es simplemente Listy el tipo de tiempo de ejecución de un
List[] instancia es List[]por lo que esta asignación no genera un
ArrayStoreException. Ahora estamos en problemas. hemos guardado un List
instancia en un array que se declara para celebrar sólo List
instancias. En la línea 5, recuperamos el elemento único de la lista única en este array. El compilador convierte automáticamente el elemento recuperado en Stringpero es un Integerpor lo que obtenemos un
ClassCastException en tiempo de ejecución. Para evitar que esto suceda, la línea 1 (que crea un genérico array) genera un error en tiempo de compilación.

Debido a que las matrices y los genéricos no se combinan bien (así como por otras razones), generalmente es mejor usar Collection objetos (en particular List objetos) en lugar de matrices.

En general no es buena idea mezclar genéricos y arreglos en Java, mejor usa un ArrayList.

Si debe utilizar un arrayla mejor manera de manejar esto es poner el array creación (su ejemplo 2 o 3) en un método separado y anótelo con @SuppressWarnings (“sin marcar”).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *