Замените интерфейс «Map <UUID, String>» на более простой «IMap»

1

У меня есть код, который использует карту следующим образом:

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>, это сработает, но нет. Есть ли способ сделать эту замену?

Теги:
interface

2 ответа

2
Лучший ответ

Это не работает, потому что HashMap не реализует ваш интерфейс IMap - поэтому вы не можете назначить HashMap переменной типа IMap.

Вы можете создать класс (а не интерфейс), который расширяет HashMap:

class XMap extends HashMap<UUID, String> { }

XMap map = new XMap();

(Лично мне не нравится злоупотреблять наследованием, просто чтобы дать что-то более удобное имя, но это может быть вопросом мнения, а у Java нет другого механизма для этого).

1

Тип вывода не работает, это так. Не имеет значения, расширяет ли IMap Map.

Если конкретная реализация не реализует интерфейс IMapjava.util.collection.HashMap - нет), вы просто не можете назначить его интерфейсу IMap.

  • 0
    Я понимаю ... это не может быть сделано с интерфейсами, но есть ли другой способ сделать то же самое, чтобы использовать IMap просто эквивалент Map<UUID, String> ?
  • 0
    Используя дженерики, но нам нужны более глубокие примеры кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню