java - 无法解析 TreeMap 的方法 tailMap

标签 java dictionary interface treemap

为什么 Map 类型的 TreeMap 没有定义方法 tailMapheadMap

Map<String, String> map = new TreeMap<>();
map.tailMap();  //cannot resolve method tailMap

通过显式转换它可以工作:

((TreeMap<String, String>) map).tailMap("a");

使用 NavigableMap 一切都很好:

NavigableMap<String, String> map1 = new TreeMap<>();
map1.tailMap("a");

如果我是对的那是因为接口(interface) Map 缺少相应的方法,尽管对象 map 是类 TreeMap 的具体实现 当然有这样的方法。

只是在寻找更详细的解释。

谢谢!

最佳答案

TreeMap 类型的对象确实有方法 tailMap ,但您通过 Map 类型的引用来引用它,它不公开 tailMap方法本身。这就是编译器提示的原因。

请注意,Java 是静态类型。这意味着无论实际实现如何,编译器都需要确保在编译时有一个方法可以调用。

因为你可以有一个 Map 未定义 tailMap 的实现方法,编译器将不允许您调用 tailMap通过 Map 引用的对象上的方法.

NavigableMap接口(interface)定义方法tailMap ,您可以在通过 NavigableMap 引用的任何对象上调用该方法.如果您使用 TreeMap,这也适用作为引用类型,因为 TreeMap工具 NavigableMap .这就是为什么编译器不会在您的第二个和第三个示例中提示(显式转换和 NavigableMap 引用声明)。

关于java - 无法解析 TreeMap 的方法 tailMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52780737/

相关文章:

c# - 对字典进行排序并获得前 3 名

go - Go语言上的接口(interface)函数调用

C 可执行代码独立于共享库

java - 如何从Java中的音频文件中提取数值

java - 无法在 Eclipse 中作为 Java 应用程序运行,即使有正确的 main() 类

python - 从可迭代对象创建字典

Grails - 接口(interface)而不是抽象类

java - Android 端口无法工作

java - 如何沿着贝塞尔曲线书写文字?

python - 获取字典中最小值对应的键