Невозможно создать класс с именем Entry
Следующий код не может быть скомпилирован с сообщением об ошибке:
Несоответствие типов: невозможно преобразовать тип элемента Test1.Entry в Map.Entry
Мой вопрос не может ли мы когда-либо использовать класс с именем Entry
в нашем проекте при использовании hash map
? И почему эта ошибка есть, хотя я не импортировал Entry
класс здесь.
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static class Entry<T> {
public String m() {
return "A";
}
}
public static void main(String[] args) {
final Set<Entry> a = new HashSet<>();
new HashMap<String, Entry>() {
{
for (final Entry entry : a) {
put(entry.m(), entry);
}
}
};
}
}
Есть ли способ сохранить это имя класса и код успешно компилируется.
4 ответа
Так как вы используете инициализацию двойной скобкой, в этом блоке отображаются внутренние карты.
Либо переименуйте Entry
класс или переместить код инициализации из блока инициализации HashMap
Так что ваши Entry
не скрывает внутренние карты Entry
реализация.
final HashMap<String, Entry> map = new HashMap<>();
for (final Entry entry : a) {
map.put(entry.m(), entry);
}
Вы должны сообщить компилятору, что вы хотите использовать интерфейс Entry, предоставляемый java.util.
Как у вас уже есть класс с именем Entry
в том же пакете, в котором вы его используете, следовательно, он неявно импортируется. Для всех мест, где вы собираетесь использовать Entry
из java.util вы должны явно использовать java.util.Map.Entry
вместо просто Entry
, Таким образом, вы можете использовать оба класса.
У вас есть проблема с именами:
ваш Entry<T>
в какой-то момент затеняет java.util.Map.Entry<K, V>
просто переименуйте Entry во что-то другое
public static class MyEntry<T> {
public String m() {
return "A";
}
}
Этот снимок может очистить ваши сомнения,
Как говорится во всплывающем окне с ошибкой, компилятор думает, что внутри вашего цикла for это java.util.Map.Entry, но вы хотите перейти к своему Entry
класс здесь.
Даже если вы предполагаете, что вы не импортируете java.util.Map.Entry
Попробуйте удалить первый импорт (т. Е. HashMap), и вы увидите, что вы больше не получаете ошибку несовместимых типов.
Вы можете попробовать любой из предложенных обходных путей, чтобы избавиться от этой проблемы.