这可能看起来像一个奇怪的问题,但我有点困惑:在Java中,方法NavigableSet.tailSet(Object)应该返回一个SortedSet,而tailSet(Object,boolean)返回一个NavigableSet。但在我看来,他们实际上都返回了TreeSet。
TreeSet<String> mts= new TreeSet<String>();
Object whatTypeAmI = mts.tailSet("bla");
我的意思是......
BUT:
为什么?
编辑:
我知道TreeSet实现了NavigableSet,它扩展了扩展Set的SortedSet。我知道将TreeSet识别为NavigableSet是有意义的。但是NavigableSet不应该被识别为TreeSet。
这个问题的重点不是实际用途,而是理论上的。 (我正在学习测试。我需要能够判断代码是否会编译)。如果tailSet返回一个TreeSet,那么为什么不编译?
TreeSet<String> tree = mytreeset.tailSet("xx");
为什么我需要向TreeSet添加强制转换?
答案 0 :(得分:1)
NavigableSet
和SortedSet
都是TreeSet
实现的接口。如果他们想要这两种方法也可以返回ConcurrentSkipListSet
,因为它也实现了两个接口。