无法为TreeMap解析方法tailMap

Ego*_*eev 9 java dictionary interface treemap

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

Map<String, String> map = new TreeMap<>();
map.tailMap();  //cannot resolve method tailMap
Run Code Online (Sandbox Code Playgroud)

使用显式转换它可以工作:

((TreeMap<String, String>) map).tailMap("a");
Run Code Online (Sandbox Code Playgroud)

随着NavigableMap一切都很好:

NavigableMap<String, String> map1 = new TreeMap<>();
map1.tailMap("a");
Run Code Online (Sandbox Code Playgroud)

如果我是对的,因为界面Map缺少相应的方法,尽管面对对象map是类的具体实现TreeMap,当然确实拥有这样的方法.

只是寻找更详细的解释.

谢谢!

小智 9

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

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

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

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

  • 实际上,`SortedMap`是定义方法的"最高"接口.所以作为一个经验法则,它应该被使用(就像一个提示 - 问题是关于`NavigableMap`,所以这里指的是好的) (2认同)