我有一些代码使用这样的地图:
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>
时,这会起作用,但不行。有没有办法替换?
答案 0 :(得分:2)
这不起作用,因为HashMap
未实现您的IMap
界面 - 因此您无法将HashMap
分配给IMap
类型的变量。
您可以创建一个扩展HashMap
的类(不是接口):
class XMap extends HashMap<UUID, String> { }
XMap map = new XMap();
(就我个人而言,我不喜欢滥用继承只是为了给一些更方便的名称,但这可能是一个意见问题 - 而且Java没有其他机制来执行此操作。)
答案 1 :(得分:1)
类型推断不起作用就是这样。 IMap
是否延伸Map
。
如果具体实现没有实现IMap
界面(而java.util.collection.HashMap
没有实现),您根本无法将其分配到IMap
界面。