为什么 Map
类型的 TreeMap
没有定义方法 tailMap
或 headMap
。
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/