无法解析 TreeMap 的方法 tailMap
Cannot resolve method tailMap for TreeMap
为什么类型 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");
如果我是对的那是因为接口 Map
缺少相应的方法,尽管表面上对象 map
是 class [=13= 的具体实现] 确实有这样的方法。
只是在寻找更详细的解释。
谢谢!
TreeMap
类型的对象确实有方法 tailMap
,但您是通过 Map
类型的引用来引用它的,它不会公开 tailMap
方法本身。这就是编译器抱怨的原因。
请注意 Java 是 静态类型 。这意味着编译器需要确保在编译时有一个方法可以调用,而不管实际实现如何。
由于您可能有一个 Map
实现 没有定义 tailMap
方法,编译器将不允许您调用 [=通过 Map
.
引用的对象上的 11=] 方法
由于 NavigableMap
接口定义了方法 tailMap
,您可以在通过 NavigableMap
引用的任何对象上调用该方法。如果您使用 TreeMap
作为引用类型,这也适用,因为 TreeMap
实现了 NavigableMap
。这就是为什么编译器不会在您的第二个和第三个示例中抱怨(显式转换和 NavigableMap
引用声明)。
为什么类型 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");
如果我是对的那是因为接口 Map
缺少相应的方法,尽管表面上对象 map
是 class [=13= 的具体实现] 确实有这样的方法。
只是在寻找更详细的解释。
谢谢!
TreeMap
类型的对象确实有方法 tailMap
,但您是通过 Map
类型的引用来引用它的,它不会公开 tailMap
方法本身。这就是编译器抱怨的原因。
请注意 Java 是 静态类型 。这意味着编译器需要确保在编译时有一个方法可以调用,而不管实际实现如何。
由于您可能有一个 Map
实现 没有定义 tailMap
方法,编译器将不允许您调用 [=通过 Map
.
由于 NavigableMap
接口定义了方法 tailMap
,您可以在通过 NavigableMap
引用的任何对象上调用该方法。如果您使用 TreeMap
作为引用类型,这也适用,因为 TreeMap
实现了 NavigableMap
。这就是为什么编译器不会在您的第二个和第三个示例中抱怨(显式转换和 NavigableMap
引用声明)。