2016-12-21 3 views
0

Вот пошло-wrone кодMap.Entry и entrySet() общий тип идет неправильно

Set<Map.Entry> entrySet = new HashMap<Object,Object>().entrySet();

он приходит с ошибкой компиляции

cannot convert from Set<Map.Entry<Object,Object>> to Set<Map.Entry>

Но должен быть просто предупреждением от использования не общего типа в случае Map.Entry от Map.Entry<Object,Object>
Но почему здесь возникает ошибка компиляции?
тогда я подозревал, что вся Set<Map.Entry> может быть причиной, что это может быть Set<Map.Entry>set<Map.Entry<Object,Object>
, но так как Map.EntryMap.Entry<Object,Object>
почему не Set<Map.Entry>set<Map.Entry<Object,Object>

Я найти relavent вопросы, но мой вопрос в этом случае - это нечто иное.
Чтобы быть более пространным, почему, когда я использую Set<Map.Entry>, я не могу получить событие для компиляции и получить сообщение об ошибке, но не просто предупреждение?
Но в другом случае, например ArrayList li = new ArrayList<String>();
я могу получить через компилировать и просто получить предупреждение «ArrayList является исходным типом. Ссылки на шаблонного типа ArrayList должны быть параметризированный»

+2

Возможный дубликат [Что такое сырье типа и почему мы не должны использовать его?] (Http://stackoverflow.com/q/2770321/1553851) – shmosel

+2

Смотрите также [Is Список подкласс списка ? Почему не генерические генераторы Java неявно полиморфны?] (Http://stackoverflow.com/q/2745265/1553851) – shmosel

+0

Спасибо, я нашел релевантные вопросы, но мой вопрос в этом случае - это нечто иное. Чтобы быть более пространным, почему, когда я использую Set , я не могу получить событие с помощью компиляции и получить сообщение об ошибке, но не просто предупреждение? Но в другом случае, напримерArrayList li = new ArrayList (); Я могу получить через компиляцию и просто получить предупреждение «ArrayList - это необработанный тип. Ссылки на общий тип ArrayList должны быть параметризированы» – jacky

ответ

1

Это из-за множества <> например,
HashSet<String> s1 = new HashSet<Integer> может пойти не так.
Если правая сторона является экземпляром универсального типа Integer, то общий тип ссылочной переменной в левой части не может быть строкой.
так String ≠ Integer как Map.Entry ≠ Map.Entry<Object,Object>

Смежные вопросы