我有一个声明为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>

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

10-07 19:30
查看更多