Java 嵌套 Map 声明 - 什么是内部 Map 具体类型

Java nested Map declaration - what's inner Map concrete type

我有一张地图 foo 声明如下。

private final Map<String, Map<String, Bar>> foo = new ConcurrentSkipListMap<String, Map<String, Bar>>();

因为我不想让数据类型看起来暴露具体的数据类型,所以我没有声明为:

private final Map<String, ConcurrentSkipListMap<String, Bar>> foo = new ConcurrentSkipListMap<String, ConcurrentSkipListMap<String, Bar>>();

我的问题是内部地图的实际类型是什么?如果我想要内部地图与外部地图相同类型(ConcurrentSkipListMap)。在不暴露具体数据类型的情况下应该怎么做?

您已将外部地图声明为 Map 而不是 ConcurrentSkipListMap 以隐藏其实现 - 您可以对内部地图执行相同的操作。

您创建的(外部)映射是空的 - 唯一已知的是它映射 StringMap(任何 class 实现 Map), 因此你的问题是错误的 - 没有实际的内部地图(无论如何还没有)并且你唯一知道它没有任何检查的是它是 Map<String, Bar>

值得注意的是,除非您有非常具体的要求强制使用特定实现,否则您应该使用接口来声明变量。