Ego*_*eev 9 java dictionary interface treemap
为什么TreeMap类型Map没有定义方法tailMap或headMap.
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引用声明)中抱怨的原因.