2015-04-12 73 views
1

我有一些代码,使用地图这样的:替换“地图<UUID,字符串>”界面更简单“IMAP”

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

这不起作用,因为HashMap没有实现你的IMap接口 - 所以你不能分配给HashMap类型IMap的变量。

你可以做一个类,它扩展HashMap(不是接口):

class XMap extends HashMap<UUID, String> { } 

XMap map = new XMap(); 

(我个人不喜欢滥用继承只是随便给一些更方便的名字,但是这可能是一个问题的意见 - 而Java没有另外的机制来做到这一点)。

1

类型推断不起作用是这样的。 IMap延伸Map并不重要。

如果具体实现不实现IMap接口(和java.util.collection.HashMap不),你根本无法把它分配给IMap接口。

+0

我明白......不能用接口完成,但是有另外一种方法来使用'IMap'就等同于'Map '吗? –

+0

使用泛型,但我们需要更深的代码示例。 – Crazyjavahacking

相关问题