Вы объявили карту HashMap<Integer, String>
. Другими словами, тип ключа - Integer
, а тип значения - String
.
Но затем вы делаете это:
Student b0 = new Student(id, sn, cor);
hmap.put(id, b0);
При попытке добавить запись карты, где значение Student
.
Student
не является подклассом String
, поэтому это недопустимо.
Вот что говорится в сообщении об ошибке и как Чтобы интерпретировать это:
no suitable method found for put(Integer,Student)
Это соответствует этому вызову put(id, b0)
. Обратите внимание, что id
объявлен как Integer
, а b0
является Student
method Map.put(Integer,String) is not applicable
Компилятор нашел метод put
в интерфейсе Map
, подпись которого put(Integer,String)
. У него правильное имя и правильное число параметров. Но ...
(argument mismatch; Student cannot be converted to String)
Компилятор попытался найти законный способ использования этого метода put
. Первый аргумент совместим, но не существует преобразования, которое преобразует Student
(что и является аргументом) в String
(что и требуется для метода).
Решение состоит в том, чтобы изменить объявление hmap
:
HashMap<Integer, Student> hmap = new HashMap<>();
(<>
указывает компилятору выводить (то есть обрабатывать) параметры типа generi c из контекста.)