Ясно, что HashMap<Integer, HashMap<Integer, Rescue>>
неверно, потому что тогда значение можно заменить в time_id_police
на HashMap<Integer, Ambulance>
. Аналогичное можно сделать, если вы замените Rescue
на ? extends Rescue
.
Однако, использование ? extends
дважды дает нам нечто, что не сломает систему типов.
HashMap<Integer, ? extends HashMap<Integer, ? extends Rescue>> getRescue() {
Большинство Java-программистов предпочитают использовать более общие Map
в типах, а не в конкретной реализации.
Map<Integer, ? extends Map<Integer, ? extends Rescue>> getRescue() {
Кстати, если вы измените тело вашего метода, чтобы использовать более краткий троичный оператор:
return a ? time_id_police : time_id_ambulance;
Вы получаете немного более полезное сообщение об ошибке, так как компилятор определяет тип для вас:
R.java:18: incompatible types
found : java.util.HashMap<java.lang.Integer,capture of ? extends java.util.HashMap<java.lang.Integer,? extends Rescue>>
required: java.util.HashMap<java.lang.Integer,java.util.HashMap<java.lang.Integer,Rescue>>
return a ? time_id_police : time_id_ambulance;
^
1 error