Ошибка компиляции: ссылка на TreeMap неоднозначна - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть код, который создает 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 голосов
/ 29 апреля 2018

Проблема вызвана тем, что ваш код ссылается на два разных класса (ваш собственный класс TreeMap и класс коллекции JDK TreeMap) с одинаковым дескриптором «TreeMap», и компилятор не может знать, какой именно. Самый простой и, вероятно, самый элегантный способ решить проблему - переименовать ваш класс, чтобы его имя больше не совпадало с именем любого из других классов, на которые он ссылается. Как советуют другие, переименование вашего класса в TreeMapTest решит вашу проблему.

Тем не менее, обратите внимание, что, хотя переименование вашего класса, вероятно, является лучшим решением, вполне законно дать вашему классу то же имя, что и другому классу. Но тогда вам нужно использовать полностью определенное имя при ссылке на другой класс, чтобы компилятор знал, когда вы ссылаетесь на свой собственный класс и когда вы ссылаетесь на другой класс с тем же именем.

Итак, еще один способ исправить ваш код - заменить первую строку вашего main метода следующим:

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

Поскольку вы используете полное имя (имя пакета, а затем имя класса) для класса коллекции JDK TreeMap, компилятор знает, что вы ссылаетесь на это, а не на свой собственный класс TreeMap. (И если вы ссылаетесь на другой класс, как этот, вы должны избавиться от строки import java.util.TreeMap, так как она больше не нужна.)

...