0
import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
        for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

コンパイルエラー

HelloWorld.java:13: error: incompatible types: Object cannot be converted to Entry<Integer,String>                                                                                         
        for(Map.Entry<Integer,String> ent : s)                                                                                                                                             
                                            ^ 

Set 内の各エントリ タイプ オブジェクトのキーと値のペアを出力しようとしています。しかし、上記のコンパイル時エラーが発生します。しかし、「s」を「h.entrySet()」に置き換えてループを正常に実行すると、コードは正常に機能します.参照を使用して「h.entrySet()」を保持すると、コンパイルエラーが発生するのはなぜですか?

4

1 に答える 1

1

この線

Set s = h.entrySet();

する必要があります

 Set<Map.Entry<Integer,String>> s = h.entrySet();

以下の for each ループは、 Set のタイプがわからないためですか?

このコードは機能します:

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        HashMap<Integer,String> h = new HashMap<Integer,String>();
        h.put(100,"Hola");
        h.put(101,"Hello");
        h.put(102,"light");
        System.out.println(h); // {100=Hola, 101=Hello, 102=light}
        Set<Map.Entry<Integer,String>> s = h.entrySet();
        System.out.println(s); // [100=Hola, 101=Hello, 102=light] 
         for(Map.Entry<Integer,String> ent : s)
        {
            System.out.println("Key=" + ent.getKey() + " Value=" + ent.getValue());
        }
     }
}

いつ見ても

incompatible types: Object cannot be converted to.. error

これは、JVM がオブジェクト型を他の型に変換しようとしており、コンパイル エラーが発生することを意味します。ここでは、for ループで発生しています。

于 2016-08-08T14:09:30.377 に答える