无法解析树状图的方法尾图



为什么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");

如果我是对的,那是因为接口Map缺乏相应的方法,尽管面对对象map是类TreeMap的具体实现,当然确实拥有这些方法。

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

谢谢!

> 类型TreeMap的对象确实有方法tailMap,但你通过类型Map的引用引用它,这不会公开tailMap方法本身。这就是编译器抱怨的原因。

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

由于您可能有一个未定义tailMap方法的Map实现,因此编译器将不允许您在通过Map引用的对象上调用tailMap方法。

由于NavigableMap接口定义了方法tailMap,因此您可以在通过NavigableMap引用的任何对象上调用该方法。如果使用TreeMap作为引用类型,这也适用,因为TreeMap实现NavigableMap。这就是为什么编译器不会在第二个和第三个示例(显式强制转换和NavigableMap引用声明(中抱怨的原因。

相关内容

最新更新