替换&#34; Map <uuid,string =“”>&#34;界面更简单&#34; IMap&#34; </uuid,>

时间:2015-04-12 06:45:39

标签: java interface

我有一些代码使用这样的地图:

Map<UUID, String> object = new Hashmap<UUID, String>();

它工作正常。但是,由于我必须在代码的其他部分使用相同的定义,我编写了这个接口:

interface IMap extends Map<UUID, String>{
}

这个想法是写IMapMap<UUID, String>更简单。

无论如何,这不起作用:

IMap object = new HashMap<UUID, String>();

编译器的错误消息是:

Type mismatch: cannot convert from HashMap<UUID,String> to IMap

我认为,当IMap扩展Map<UUID, String>时,这会起作用,但不行。有没有办法替换?

2 个答案:

答案 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界面。