Java 映射和泛型映射

Java 映射和泛型映射,java,generics,collections,recursion,maps,Java,Generics,Collections,Recursion,Maps,我想创建一个映射的(递归)映射。也就是说,映射类型的值是与外部映射类型相同的另一个映射 例如: Map<String, Map<String, Map<String, ... >>>> foo; Map>foo; 显然,为了做到这一点,我需要某种方式来引用“正在定义的类型”或其他东西。我想我可以做到: Map<String, Map<String, ?>> Map 。。。然后只要@superswarnings(“unche

我想创建一个映射的(递归)映射。也就是说,映射类型的值是与外部映射类型相同的另一个映射

例如:

Map<String, Map<String, Map<String, ... >>>> foo;
Map>foo;
显然,为了做到这一点,我需要某种方式来引用“正在定义的类型”或其他东西。我想我可以做到:

Map<String, Map<String, ?>>
Map

。。。然后只要@superswarnings(“unchecked”)我自己越过不可避免的警告,但是有更好的方法吗?

创建一个辅助类或接口来引用“正在定义的类型”。像这样:

class MyMap extends HashMap<String, MyMap> {
    ...
}
类MyMap扩展了HashMap{
...
}

接口MyMap扩展了Map{
}

(我认为你不能没有这样的辅助类/接口。当“递归”时,你需要一个名称来引用。)

最后,我所做的与aioobe的解决方案类似,但避免了直接扩展任何具体的映射类:

class StringTrie {
 private final Map<String, StringTrie> map = ...;

 ...
}
StringTrie类{
私有最终映射=。。。;
...
}

隐藏映射的缺点当然是类需要手动公开任何感兴趣的方法并将它们传递给映射。在我的情况下,我只需要一对夫妇,所以这很有效。

为什么要这样做?我觉得有更好的数据结构可以满足您的需要。这毫无意义。。。在那里的某个地方,您将有一个
映射
,它包含除
映射
对象之外的其他内容。我想我不明白你到底想完成什么。你似乎想要一些树型数据结构?@Brian Roach,为什么他需要一个包含
map
对象以外的东西的地图呢?嗯。。好啊但这不太有道理。在我看来,一张空地图会是一个完美的基本情况。我说或者。。。不要同时使用类和接口!谢谢不幸的副作用是,它失去了集合和集合接口的许多好处。在第一种情况下,我需要选择一个具体的实现并坚持这样做,我坚持重新实现像所有构造函数一样的东西。第二种方式意味着类似于第一种方式的东西在其他地方实际实现了它,对吗?Map是一个接口。你不能扩展它。“实现”?@newacct,接口可以扩展接口。:-)@哦,是的,我没看到。但你还是需要一个具体的课程,对吗
class StringTrie {
 private final Map<String, StringTrie> map = ...;

 ...
}