将 "Map<UUID, String>" 界面替换为更简单的 "IMap"

Replace a "Map<UUID, String>" interface for a simpler "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>,这会奏效,但不行。有没有办法进行替换?

这种方式类型推断不行。 IMap 是否扩展 Map.

并不重要

如果具体实现没有实现 IMap 接口(而 java.util.collection.HashMap 没有),你根本无法将它分配给 IMap 接口。

这不起作用,因为 HashMap 没有实现您的 IMap 接口 - 因此您不能将 HashMap 分配给 IMap.[=16 类型的变量=]

您可以创建一个 class(不是接口)来扩展 HashMap:

class XMap extends HashMap<UUID, String> { }

XMap map = new XMap();

(就我个人而言,我不喜欢滥用继承只是为了给一些更方便的名称,但这可能是一个意见问题 - Java 没有其他机制可以做到这一点) .