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(你自己的TreeMapclass和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 行,因为它不再需要了。)