Java 无法强制转换哈希映射<;字符串,字符串>;到接口扩展映射<;字符串,字符串>;

Java 无法强制转换哈希映射<;字符串,字符串>;到接口扩展映射<;字符串,字符串>;,java,generics,map,hashmap,extends,Java,Generics,Map,Hashmap,Extends,这可能是我的一个简单误解 有一个简单的界面: public interface IParams extends Map<String,String> { } 了解我在这种情况下对泛型的误解在哪里吗?HashMap没有实现您的接口iparms,因此您不能将HashMap强制转换为iparms。这与泛型无关 iparms和HashMap都是“兄弟”,即都实现或扩展了Map。但这并不意味着您可以将HashMap视为iparms。假设您将向iParms接口添加一个方法 public int

这可能是我的一个简单误解

有一个简单的界面:

public interface IParams extends Map<String,String> {
}

了解我在这种情况下对泛型的误解在哪里吗?

HashMap
没有实现您的接口
iparms
,因此您不能将
HashMap
强制转换为
iparms
。这与泛型无关

iparms
HashMap
都是“兄弟”,即都实现或扩展了
Map
。但这并不意味着您可以将
HashMap
视为
iparms
。假设您将向
iParms
接口添加一个方法

public interface IParams extends Map<String, String> {
    void someMethod();
}
关于你的评论:


其目的是创建一个隐藏泛型的接口,并保存(示例中未显示)映射键字符串定义

您可以创建一个类来实现
iparms
并扩展
HashMap

public class Params extends HashMap<String, String> implements IParams {
    // ...
}

IParams params = new Params();
公共类参数扩展HashMap实现IPARMS{
// ...
}
IParams params=新参数();

HashMap
实现了
Map
接口,但没有实现您的接口
IParams
即使您的接口源于
Map
,您也不能将其强制转换为
IParams
,因为它不是
IParams

您不会误解泛型,您误解了继承。有什么理由扩展地图吗?您是否重写了任何方法?其目的是创建一个隐藏泛型的接口,并保留(示例中未显示)映射键字符串定义本质上的解释,我没有考虑同级。我试图直接使用HashMap实现,而您关于创建一个快速具体类的建议看起来非常合理。谢谢杰斯珀。
public interface IParams extends Map<String, String> {
    void someMethod();
}
IParams params = (IParams) new HashMap<String,String>();

// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
public class Params extends HashMap<String, String> implements IParams {
    // ...
}

IParams params = new Params();