Compilation error: reference to TreeMap is ambiguous
Compilation error: reference to TreeMap is ambiguous
我有一个代码可以创建 TreeMap
并填充它,然后尝试按其中可用的整数值对其进行排序。但是它在 TreeMap
[显示编译器错误 "reference to TreeMap is ambiguous"] 下给了我一条红线,我不知道为什么。以下是我的代码:
package treemap;
import java.util.*;
import java.util.HashSet;
import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
public class TreeMap {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
TreeMap<Integer, String> hm = new TreeMap<Integer, String>();
hm.put(100, "Amit");
hm.put(102, "Ravi");
hm.put(101, "Vijay");
hm.put(103, "Rahul");
for (Map.Entry m : hm.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
你能帮帮我吗?
问题是因为你的代码引用了两个不同的classes(你自己的TreeMap
class和JDK集合classTreeMap
) 具有相同的句柄 "TreeMap",编译器不知道哪个是哪个。解决此问题的最简单且可能是最优雅的方法是重命名您的 class,使其名称不再与其中引用的任何其他 class 相同。正如其他人所建议的那样,将您的 class 重命名为 TreeMapTest
将解决您的问题。
但是请注意,虽然重命名您的 class 可能是最好的解决方案,但将您的 class 与另一个 class 重命名是完全合法的。但是你需要在引用另一个 class 时使用完全限定名称,以便编译器知道你什么时候引用你自己的 class 以及什么时候引用另一个 class同名
因此,另一种修复代码的方法是将 main
方法的第一行替换为:
java.util.TreeMap<Integer, String> hm = new java.util.TreeMap<>();
因为您使用的是 JDK TreeMap
集合 class 的完全限定名称(包名称然后是 class 名称),编译器知道您我指的是那个而不是你自己的 TreeMap
class。 (如果你像这样引用另一个 class,你必须去掉 import java.util.TreeMap
行,因为它不再需要了。)
我有一个代码可以创建 TreeMap
并填充它,然后尝试按其中可用的整数值对其进行排序。但是它在 TreeMap
[显示编译器错误 "reference to TreeMap is ambiguous"] 下给了我一条红线,我不知道为什么。以下是我的代码:
package treemap;
import java.util.*;
import java.util.HashSet;
import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
public class TreeMap {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
TreeMap<Integer, String> hm = new TreeMap<Integer, String>();
hm.put(100, "Amit");
hm.put(102, "Ravi");
hm.put(101, "Vijay");
hm.put(103, "Rahul");
for (Map.Entry m : hm.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
你能帮帮我吗?
问题是因为你的代码引用了两个不同的classes(你自己的TreeMap
class和JDK集合classTreeMap
) 具有相同的句柄 "TreeMap",编译器不知道哪个是哪个。解决此问题的最简单且可能是最优雅的方法是重命名您的 class,使其名称不再与其中引用的任何其他 class 相同。正如其他人所建议的那样,将您的 class 重命名为 TreeMapTest
将解决您的问题。
但是请注意,虽然重命名您的 class 可能是最好的解决方案,但将您的 class 与另一个 class 重命名是完全合法的。但是你需要在引用另一个 class 时使用完全限定名称,以便编译器知道你什么时候引用你自己的 class 以及什么时候引用另一个 class同名
因此,另一种修复代码的方法是将 main
方法的第一行替换为:
java.util.TreeMap<Integer, String> hm = new java.util.TreeMap<>();
因为您使用的是 JDK TreeMap
集合 class 的完全限定名称(包名称然后是 class 名称),编译器知道您我指的是那个而不是你自己的 TreeMap
class。 (如果你像这样引用另一个 class,你必须去掉 import java.util.TreeMap
行,因为它不再需要了。)