“No se puede crear una matriz genérica de …”: ¿cómo crear una matriz de mapa ?

Me gustaría usar la clase simpleJdbcInsert y el método executeBatch

public int[] executeBatch(Map[] batch) 

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html

Entonces necesito pasar una matriz de Map como parámetro. ¿Cómo crear una matriz así? Lo que probé es

 Map[] myArray = new HashMap[10] 

Es un error: no se puede crear una matriz genérica de Map

Una List<Map> sería más fácil, pero creo que necesito una matriz. Entonces, ¿cómo crear una matriz de Map ? Gracias

Debido a cómo funcionan los generics en Java, no puede crear directamente una matriz de un tipo genérico (como Map[] ). En su lugar, crea una matriz del tipo sin formato ( Map[] ) y lo convierte en Map[] . Esto provocará una advertencia de comstackdor inevitable (pero suprimible).

Esto debería funcionar para lo que necesita:

 Map[] myArray = (Map[]) new Map[10]; 

Es posible que desee anotar el método en el que aparece con @SupressWarnings("unchecked") , para evitar que se muestre la advertencia.

Puede crear una matriz genérica de mapa.

  1. Crea una lista de mapas.

     List> myData = new ArrayList>(); 
  2. Inicializar array

     Map[] myDataArray = new HashMap[myData.size()]; 
  3. Rellenar datos en una matriz de la lista.

     myDataArray = myData.toArray(myDataArray); 

He tenido algunas dificultades con esto, pero he descubierto algunas cosas que compartiré tan simple como sea posible.

Mi experiencia con los generics está limitada a las colecciones, así que las uso en las definiciones de clase, como:

 public class CircularArray { 

que contiene el miembro de datos:

 private E[] data; 

Pero no puede hacer y ordenar de tipo genérico, por lo que tiene el método:

 @SuppressWarnings("unchecked") private E[] newArray(int size) { return (E[]) new Object[size]; //Create an array of Objects then cast it as E[] } 

En el constructor:

 data = newArray(INITIAL_CAPACITY); //Done for reusability 

Esto funciona para generics generics, pero necesitaba una lista que pudiera ser clasificada: una lista de Comparables.

 public class SortedCircularArray> { //any E that implements Comparable or extends a Comparable class 

que contiene el miembro de datos:

 private E[] data; 

Pero nuestra nueva clase arroja java.lang.ClassCastException:

 @SuppressWarnings("unchecked") private E[] newArray(int size) { //Old: return (E[]) new Object[size]; //Create an array of Objects then cast it as E[] return (E[]) new Comparable[size]; //A comparable is an object, but the converse may not be } 

En el constructor todo es lo mismo:

 data = newArray(INITIAL_CAPACITY); //Done for reusability 

Espero que esto ayude y espero que nuestros usuarios más experimentados me corrijan si he cometido errores.

Desde el tutorial de Oracle [ sic ]:

No puede crear matrices de tipos parametrizados. Por ejemplo, el siguiente código no se comstack:

 List[] arrayOfLists = new List[2]; // compile-time error 

El siguiente código ilustra qué sucede cuando se insertan diferentes tipos en una matriz:

 Object[] strings = new String[2]; strings[0] = "hi"; // OK strings[1] = 100; // An ArrayStoreException is thrown. 

Si prueba lo mismo con una lista genérica, habría un problema:

 Object[] stringLists = new List[]; // compiler error, but pretend it's allowed stringLists[0] = new ArrayList(); // OK stringLists[1] = new ArrayList(); // An ArrayStoreException should be thrown, // but the runtime can't detect it. 

Si se permitieran arreglos de listas parametrizadas, el código anterior no arrojaría la ArrayStoreException deseada.

Para mí, suena muy débil. Creo que cualquier progtwigdor con un conocimiento suficiente de los generics estaría perfectamente bien, e incluso esperaría, que ArrayStoredException no se arroje en ese caso.

Aún más, la mayoría de los progtwigdores simplemente lo harán:

 List arrayOfLists = (List) new List[2]; 

lo que los pondrá exactamente en el mismo riesgo de no lanzar ArrayStoreException.

Hasta donde mi conocimiento

Frist intenta crear una matriz de java.lang.Object y luego convertir a Generic type T

Ejemplo:

 class Example{ public DataType array = (DataType[]) new Object[5] ; } 

De esta manera, puede crear una matriz de tipos de datos generics