我有一个声明为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
(任何实现Map
的类),因此您的问题是错误的-没有实际的内部地图(目前还不是),而您唯一不经检查就知道的是它是Map<String, Bar>
值得注意的是,除非您有非常特定的要求来强制使用特定实现,否则您应该使用接口来声明变量。