0

Device が Device という名前のクラスのインスタンスである場所を使用するカスタム マップがあります。

devices = new HashMap<String, Device>();

StackOverflow で提案されたいくつかのイテレータと for ループを試しましたが、それらはすべてエラーを生成するようで、その理由はわかりません。

エラーの例:

ここに画像の説明を入力

ここに画像の説明を入力

4

4 に答える 4

3

の宣言devicesが間違っているようです。そのはず:

Map<String, Device> devices;

生の (「消去された」) タイプではありませんMap。最新のコンパイラは、未加工の型を使用する場合に警告を表示する必要があります。コンパイラの警告に注意してください。

于 2012-11-01T14:33:59.430 に答える
0

最初のシナリオでは、あなたはただ与える

for(Map.Entry entry:devices.entrySet()){}

十分であり、そこにMap.Entry(String、Device)をキャストする必要はありません。2番目のシナリオでは、エントリから値を取得すると、オブジェクト値が返されるため、特定のインスタンスにキャストする必要があります。

デバイスdevice=(デバイス)pairs.getValue()

于 2012-11-01T14:38:45.030 に答える
0

これを試すことができますか:

HashMap<String, Device> devices = new HashMap<String, Device>();

// do stuff to load devices

Device currentDevice;
for (String key : devices.keySet()) {

    currentDevice = devices.get(key);
    // do stuff with current device

}
于 2012-11-01T14:32:19.853 に答える
0

マップを反復処理するには 3 つの方法があります。1) For-Each ループを使用してエントリを反復処理します。2) For-Each ループを使用してキーまたは値を繰り返します。3) Iterator を使用した反復処理。(これについては、ジェネリックを使用して、またはジェネリックなしで反復できます)

    Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry entry = (Map.Entry) entries.next();
    Integer key = (Integer)entry.getKey();
    Integer value = (Integer)entry.getValue();
    System.out.println("Key = " + key + ", Value = " + value);
}
于 2012-11-01T14:42:16.387 に答える