Re: Генерики с масками
От: Skipy Россия http://www.skipy.ru
Дата: 03.06.10 15:29
Оценка:
Здравствуйте, JazzzMaster, Вы писали:

JM>HashMap<String, ?> hash = new HashMap<String, Object>();

JM> ...
JM>hash.put(classified.toString(), object);

JM>Eclipse ругается на строчку hash.put(...)

JM>The method put(String, capture#4-of ?) in the type HashMap<String,capture#4-of ?> is not applicable for the arguments (String, Object)
JM>Не могу понять, что ему надо..

А чего Вы ожидали?

Конструкция HashMap<String, ?> означает, что тип значения может быть абсолютно любой. Хоть Object, хоть String, хоть Date. На уровне переменной hash это никак не видно. Соответственно, компилятор не может позволить добавить в эту коллекцию ничего — он не может проконтролировать тип.

Для добавления предусмотрена конструкция HashMap<String, ? super Object> hash. Она означает, что тип значения — любой родитель Object. Т.е. если мы добавим сюда Object — ничего плохого не будет. И компилятор разрешит добавлять туда все наследники Object.
С уважением,
Евгений aka Skipy
www.skipy.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.