これは私がやろうとしたことですが、警告が表示されます:
HashMap<String, String>[] responseArray = new HashMap[games.size()];
型の安全性:型HashMap []の式は、HashMap []に準拠するために未チェックの変換が必要です。
次のようなものを使用できます。
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 Language Specification、セクション15.10には次のように記載されています。
配列作成式は、PrimitiveTypeまたはClassOrInterfaceTypeで指定されたタイプの要素を持つ新しい配列であるオブジェクトを作成します。 ClassOrInterfaceTypeが再定義可能な型を示さない場合、コンパイル時エラーです(§4.7)。
そして
上記の規則は、配列作成式の要素タイプを、無制限のワイルドカード以外のパラメーター化されたタイプにすることはできないことを意味します。
最も近い方法は、未チェックのキャストを使用することです。これは、未処理の型から、または既に行ったように無制限のワイルドカードからです。
HashMap<String, String>[] responseArray = (Map<String, String>[]) new HashMap<?,?>[games.size()];
あなたのバージョンは明らかに優れています:-)
Javaは、HashMapの配列を作成することを望みませんが、Objectの配列を作成できるようにします。そのため、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
を使用してください。