Mat*_*son 5 java generics extends hashmap map
这可能是我个人的一个简单误解.
有一个简单的界面:
public interface IParams extends Map<String,String> {
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用:
IParams params = (IParams) new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)
通过语法和编译,但在运行时我得到:
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.foobar.IParams
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我对我对泛型的误解在哪里有所了解?
Jes*_*per 10
HashMap没有实现你的界面IParams,所以你不能强制HashMap转换为IParams.这与泛型没有任何关系.
IParams并且HashMap是"兄弟姐妹",在实施或延伸的意义上Map.但这并不意味着你可以把它HashMap视为一个IParams.假设您要在IParams界面中添加方法.
public interface IParams extends Map<String, String> {
void someMethod();
}
Run Code Online (Sandbox Code Playgroud)
当然,someMethod不存在HashMap.如果使用HashMapto to IParamswork,如果你试图调用该方法,你会发生什么?
IParams params = (IParams) new HashMap<String,String>();
// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
Run Code Online (Sandbox Code Playgroud)
关于你的评论:
目的是创建一个隐藏泛型的接口,并且还保持(在示例中未显示)映射键字符串定义
你可以做的是创建一个实现IParams和扩展的类HashMap:
public class Params extends HashMap<String, String> implements IParams {
// ...
}
IParams params = new Params();
Run Code Online (Sandbox Code Playgroud)