«Невозможно создать общий массив …» – как создать массив карт ?

Я хотел бы использовать class simpleJdbcInsert и метод executeBatch

public int[] executeBatch(Map[] batch) 

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

Поэтому мне нужно передать массив параметра « Map as. Как создать такой массив? То, что я пробовал,

 Map[] myArray = new HashMap[10] 

Это ошибка: невозможно создать общий массив Map

List<Map> будет проще, но я думаю, мне нужен массив. Итак, как создать массив Map ? благодаря

Из-за того, как работают дженерики в Java, вы не можете напрямую создать массив общего типа (например, Map[] ). Вместо этого вы создаете массив необработанного типа ( Map[] ) и отсылаете его в Map[] . Это вызовет неизбежное (но подавляемое) предупреждение компилятора.

Это должно работать для того, что вам нужно:

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

Вы можете аннотировать метод, который встречается в @SupressWarnings("unchecked") , чтобы предотвратить показ предупреждения.

Вы можете создать общий массив карты.

  1. Создайте список карт.

     List> myData = new ArrayList>(); 
  2. Инициализировать массив.

     Map[] myDataArray = new HashMap[myData.size()]; 
  3. Заполнение данных в массиве из списка.

     myDataArray = myData.toArray(myDataArray); 

У меня были некоторые трудности с этим, но я выяснил несколько вещей, которые я поделюсь как можно проще.

Мой опыт работы с генериками ограничен коллекциями, поэтому я использую их в определениях classов, таких как:

 public class CircularArray { 

который содержит элемент данных:

 private E[] data; 

Но вы не можете сделать и массив типа generic, поэтому он имеет метод:

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

В конструкторе:

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

Это работает для общих генериков, но мне нужен список, который можно было бы отсортировать: список Comparables.

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

который содержит элемент данных:

 private E[] data; 

Но наш новый class бросает 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 } 

В конструкторе все одно и то же:

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

Надеюсь, это поможет, и я надеюсь, что наши более опытные пользователи исправят меня, если я ошибаюсь.

Из учебника Oracle [ sic ]:

Вы не можете создавать массивы параметризованных типов. Например, следующий код не компилируется:

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

Следующий код иллюстрирует, что происходит, когда различные типы вставляются в массив:

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

Если вы попробуете одно и то же с общим списком, возникнет проблема:

 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. 

Если разрешены массивы параметризованных списков, предыдущий код не смог бы выдать требуемое исключение ArrayStoreException.

Для меня это звучит очень слабо. Я думаю, что любой программист с достаточным пониманием дженериков был бы совершенно прав и даже ожидал, что ArrayStoredException не будет выбрано в таком случае.

Более того, большинство программистов просто сделают следующее:

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

что поставит их точно таким же образом, что ArrayStoreException не будет выбрано.

Насколько мне известно

Фрист попытается создать массив java.lang.Object, а затем применить к типу Generic T

Пример:

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

Таким образом, вы можете создать массив общих типов данных

  • Как я могу расширить типизированные массивы в Swift?
  • Печать массива в Scala
  • Почему Java разрешает массивы размером 0?
  • Java-массив с элементами более 4 ГБ
  • Передача массивов в качестве параметров в bash
  • Совокупность, сортировка и перенос строк в столбцы
  • Чтение CSV-файла и сохранение значений в массиве
  • C ++ передает массив по ссылке
  • Любой способ объявить массив в строке?
  • Как resize многомерного (2D) массива в C #?
  • Передача непосредственно инициализатора массива параметру метода не работает
  • Давайте будем гением компьютера.