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
以隐藏其实现 - 您可以对内部地图执行相同的操作。
您创建的(外部)映射是空的 - 唯一已知的是它映射 String
到 Map
(任何 class 实现 Map
), 因此你的问题是错误的 - 没有实际的内部地图(无论如何还没有)并且你唯一知道它没有任何检查的是它是 Map<String, Bar>
值得注意的是,除非您有非常具体的要求强制使用特定实现,否则您应该使用接口来声明变量。
我有一张地图 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
以隐藏其实现 - 您可以对内部地图执行相同的操作。
您创建的(外部)映射是空的 - 唯一已知的是它映射 String
到 Map
(任何 class 实现 Map
), 因此你的问题是错误的 - 没有实际的内部地图(无论如何还没有)并且你唯一知道它没有任何检查的是它是 Map<String, Bar>
值得注意的是,除非您有非常具体的要求强制使用特定实现,否则您应该使用接口来声明变量。