次に例を示します。
import java.util.HashMap;
public class Test
{
public static void main(String[] args)
{
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("leorum", 1);
map.put("ipsum", 2);
map.put("dolor", 3);
System.out.println(map.keySet().toString());
}
}
すべてが正常にコンパイルされ、実行されます。ただし、map.keySet()
別の変数に移動すると:
import java.util.HashMap;
public class Test
{
public static void main(String[] args)
{
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("leorum", 1);
map.put("ipsum", 2);
map.put("dolor", 3);
Set<String> keys = map.keySet();
System.out.println(keys.toString());
}
}
エラーがスローされます:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Set cannot be resolved to a type
at Test.main(Test.java:12)
2 番目の例でエラーが発生する理由は理解できますが、最初の例ではエラーが発生しないのはなぜですか? map.keySet()
Javaコンパイラは、 java.util.Setをインポートせずに何が返されるかをどのように認識しますか?
この動作は、他のプログラミング言語、特に C++ でも見られます。