【发布时间】:2013-07-07 07:26:45
【问题描述】:
这是一个例子:
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)
我明白为什么我在第二个示例中收到错误,但为什么我在第一个示例中没有收到错误? java编译器怎么知道map.keySet()在不导入java.util.Set的情况下返回什么?
我在其他编程语言中也看到过这种行为,尤其是 C++。
【问题讨论】: