编译错误:对TreeMap的引用不明确

时间:2018-04-29 14:13:54

标签: java compiler-errors treemap

我有一个创建TreeMap的代码并填充它然后尝试按其中可用的整数值对其进行排序。但它给了我一条红线TreeMap [显示编译器错误“对TreeMap的引用含糊不清”]我不知道为什么。以下是我的代码:

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);
        }
    }
}

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

问题是由于您的代码引用了两个不同的类(您自己的TreeMap类,而JDK集合类TreeMap)具有相同的句柄,#34; TreeMap&#34;,并且编译器无法知道哪个是哪个。解决问题的最简单,也可能是最优雅的方法是重命名您的类,使其名称不再与其中引用的任何其他类相同。正如其他人所建议的那样,将您的课程重命名为TreeMapTest将解决您的问题。

但请注意,虽然重命名您的课程可能是最佳解决方案,但为您的课程提供与其他课程相同的名称是完全合法的。但是当你引用另一个类时,你需要使用一个完全限定的名字,这样编译器就知道你何时引用你自己的类,以及当你引用同名的另一个类时

因此修复代码的另一种方法是用{\}更换main方法的第一行:

java.util.TreeMap<Integer, String> hm = new java.util.TreeMap<>();

因为您正在使用JDK TreeMap集合类的完全限定名称(包名称,类名称),编译器知道您指的是那个,而不是您自己的TreeMap课程。 (如果你指的是这样的另一个类,你必须摆脱import java.util.TreeMap行,因为它不再需要。)