编译错误:TreeMap引用不明确问题排查求助
解决TreeMap引用歧义的编译错误
嘿,这个问题我太熟啦!你遇到的reference to TreeMap is ambiguous错误,根源在于你自己定义的类名和Java标准库中的java.util.TreeMap重名了!
咱们来捋一捋:你在treemap包下创建了一个名为TreeMap的类,同时又通过import java.util.TreeMap;导入了JDK自带的TreeMap类。这时候编译器就懵了——当你写TreeMap的时候,到底是指你自己写的这个类,还是JDK提供的那个?所以就抛出了歧义错误。
两种解决办法任你选:
1. 最推荐:修改自己的类名(避免冲突)
直接把你的类名改成不与标准库重名的名字,比如TreeMapDemo或者CustomTreeMap,这样从根本上解决冲突,代码也更易读。修改后的代码大概是这样:
package treemap; import java.util.*; public class TreeMapDemo { // 这里修改了类名 public static void main(String[] args) { TreeMap<Integer, String> map = new TreeMap<>(); // 填充数据 map.put(3, "Apple"); map.put(1, "Banana"); map.put(2, "Cherry"); // TreeMap默认按key升序排列,直接遍历即可看到排序结果 for(Map.Entry<Integer, String> entry : map.entrySet()){ System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
2. 不改类名:使用全限定类名指定JDK的TreeMap
如果你坚持要用TreeMap作为自己的类名,那在创建JDK的TreeMap对象时,必须写出完整的包路径,明确告诉编译器你要的是哪个类:
package treemap; import java.util.*; public class TreeMap { public static void main(String[] args) { // 用全限定类名指定JDK自带的TreeMap java.util.TreeMap<Integer, String> map = new java.util.TreeMap<>(); map.put(3, "Apple"); map.put(1, "Banana"); map.put(2, "Cherry"); // 迭代遍历输出排序后的数据 Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<Integer, String> entry = iterator.next(); System.out.println(entry.getKey() + ": " + entry.getValue()); } } }
小提醒
以后写代码尽量别用Java标准库中的类名(比如List、Map、TreeMap这些)来命名自己的类,不仅容易出这种编译错误,其他看你代码的人也容易混淆哦~
内容的提问来源于stack exchange,提问作者Sara Shall
相关产品推荐
相关产品推荐

