HashMap
не реализует свой интерфейс IParams
, так что вы не можете бросить HashMap
к IParams
. Это не имеет ничего общего с дженериками.
IParams
и HashMap
являются «братьями и сестрами», в том смысле, что оба они выполняют или расширяют Map
. Но это не значит, что вы можете лечить HashMap
, как если бы это IParams
. Предположим, что вы добавите метод в свой интерфейс IParams
.
public interface IParams extends Map<String, String> {
void someMethod();
}
Ofcourse, someMethod
не существует в HashMap
. Если листинг HashMap
на IParams
будет работать, что бы вы ожидали, если попытаетесь вызвать метод?
IParams params = (IParams) new HashMap<String,String>();
// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
Что касается Вашего комментария:
намерение состоит в том, чтобы создать интерфейс, который скрывает дженерики, а также провести (не показано в примере) отображают ключевые определения строк
что вы могли бы сделать, это создать класс, который реализует IParams
и расширяет HashMap
:
public class Params extends HashMap<String, String> implements IParams {
// ...
}
IParams params = new Params();
Вы не недопонимание дженерик, вы непонимание наследования , – Marcelo
Любые причины для продления карты? Вы переопределяете какие-либо методы? – kosa
Цель состоит в том, чтобы создать интерфейс, который скрывает общие элементы, а также удерживать (не показано в примере) определения строки ключевой строки карты –