«Невозможно создать общий массив …» – как создать массив карт ?
Я хотел бы использовать 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. Как создать такой массив? То, что я пробовал,
- В Matlab, когда оптимально использовать bsxfun?
- java: что это: [Ljava.lang.Object ;?
- Хранение массивов в базе данных: JSON и сериализованный массив
- Сопоставление массива PostgreSQL с Hibernate
- Как получить доступ к многомерному массиву и управлять им с помощью имен / путей ключа?
Map[] myArray = new HashMap[10]
Это ошибка: невозможно создать общий массив Map
List<Map>
будет проще, но я думаю, мне нужен массив. Итак, как создать массив Map
? благодаря
- Объявление размера массива с непостоянной переменной
- Добавление элементов в массив Swift для нескольких streamов, вызывающих проблемы (поскольку массивы не являются streamобезопасными) - как мне обойти это?
- Как скопировать массив символов в C?
- Изменение размера массива с помощью C
- Каков наилучший способ получить объект classа для типа массива?
- Доступ к случайному элементу в списке
- Создание расширения для фильтрации нилей из массива в Swift
- Массив Java, поиск дубликатов
Из-за того, как работают дженерики в Java, вы не можете напрямую создать массив общего типа (например, Map
). Вместо этого вы создаете массив необработанного типа ( Map[]
) и отсылаете его в Map
. Это вызовет неизбежное (но подавляемое) предупреждение компилятора.
Это должно работать для того, что вам нужно:
Map[] myArray = (Map[]) new Map[10];
Вы можете аннотировать метод, который встречается в @SupressWarnings("unchecked")
, чтобы предотвратить показ предупреждения.
Вы можете создать общий массив карты.
-
Создайте список карт.
List
-
Инициализировать массив.
Map
[] myDataArray = new HashMap[myData.size()]; -
Заполнение данных в массиве из списка.
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] ; }
Таким образом, вы можете создать массив общих типов данных