Это то, что я пытался сделать, но это дает мне предупреждение:
HashMap<String, String>[] responseArray = new HashMap[games.size()];
Тип безопасности: выражение типа HashMap [] требует необработанного преобразования для соответствия HashMap []
Это то, что я пытался сделать, но это дает мне предупреждение:
HashMap<String, String>[] responseArray = new HashMap[games.size()];
Тип безопасности: выражение типа HashMap [] требует необработанного преобразования для соответствия HashMap []
Что дает? Оно работает. Просто игнорируйте это:
@SuppressWarnings("unchecked")
Нет, вы cannot параметризуете его. Однако я бы скорее использовал List<Map<K, V>>
.
List<Map<String, String>> listOfMaps = new ArrayList<Map<String, String>>();
Чтобы узнать больше о коллекциях и картах, просмотрите этот учебник.
Вы можете использовать что-то вроде этого:
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);
}
}
Спецификация языка Java, раздел 15.10, гласит:
Выражение создания массива создает объект, который является новым массивом, элементы имеют тип, указанный PrimitiveType или ClassOrInterfaceType. Это ошибка времени компиляции, если ClassOrInterfaceType не обозначает (§4.7).
и
Из приведенных выше правил следует, что элемент введите в выражении создания массива не может быть параметризованным типом, другой чем неограниченный шаблон.
Самое близкое, что вы можете сделать, это использовать неконтролируемый листинг, либо из необработанного типа, как вы это делали, либо из неограниченного шаблона:
HashMap<String, String>[] responseArray = (Map<String, String>[]) new HashMap<?,?>[games.size()];
Ваша версия явно лучше: -)
Java не хочет, чтобы вы создавали массив HashMaps, но он позволит вам создать массив объектов. Итак, просто напишите объявление класса как оболочку вокруг вашего HashMap и создайте массив этого класса. Это позволяет хранить некоторые дополнительные данные о HashMaps, если вы так решите - что может быть полезно, учитывая, что у вас уже есть несколько сложная структура данных.
Что это выглядит:
private static someClass[] arr = new someClass[someNum];
и
public class someClass {
private static int dataFoo;
private static int dataBar;
private static HashMap<String, String> yourArray;
...
}
У вас не может быть массив общего типа. Вместо этого используйте List
.