У меня есть код, который использует карту следующим образом:
Map<UUID, String> object = new Hashmap<UUID, String>();
И он отлично работает. Но, поскольку я должен использовать это же определение в других частях кода, я написал этот интерфейс:
interface IMap extends Map<UUID, String>{
}
Идея заключается в том, что проще писать IMap
чем Map<UUID, String>
.
Во всяком случае, это не работает:
IMap object = new HashMap<UUID, String>();
Сообщение об ошибке из компилятора:
Type mismatch: cannot convert from HashMap<UUID,String> to IMap
Я думаю, что, поскольку IMap
расширяет Map<UUID, String>
, это сработает, но нет. Есть ли способ сделать эту замену?
Это не работает, потому что HashMap
не реализует ваш интерфейс IMap
- поэтому вы не можете назначить HashMap
переменной типа IMap
.
Вы можете создать класс (а не интерфейс), который расширяет HashMap
:
class XMap extends HashMap<UUID, String> { }
XMap map = new XMap();
(Лично мне не нравится злоупотреблять наследованием, просто чтобы дать что-то более удобное имя, но это может быть вопросом мнения, а у Java нет другого механизма для этого).
Тип вывода не работает, это так. Не имеет значения, расширяет ли IMap
Map
.
Если конкретная реализация не реализует интерфейс IMap
(а java.util.collection.HashMap
- нет), вы просто не можете назначить его интерфейсу IMap
.
IMap
просто эквивалентMap<UUID, String>
?