これは奇妙な質問のように思えるかもしれませんが、ちょっと混乱します:Javaでは、NavigableSet.tailSet(Object)メソッドはSortedSetを返し、tailSet(Object、 boolean)はNavigableSetを返します。しかし、実際にはどちらもTreeSetを返すように思えます。私が意味する.tailSetはおそらくNavigableSetを返しますが、TreeSetを返すようです
TreeSet<String> mts= new TreeSet<String>();
Object whatTypeAmI = mts.tailSet("bla");
...
- オラクルページはのtailSet(Object)を言うが返したSortedSetとのtailSet(オブジェクト、ブール値)のNavigableSet
- 私は中の方法に比べて、私のマウスを移動それはあまりにも
- あなたが直接それをキャストなしのNavigableSetへのtailSet(文字列)の結果を割り当てることができないという事実は、同様に
しかし:私はデバッグモードでコードを実行し、mts.tailSet( "BLA")を調べると、それはそれは型の変数だと言われます
- TreeSetの
- mts.tailSet( "BLA")。 getClass()はTreeSetを返します
- TreeSetのmts.tailSet( "bla")インスタンスはtrueを返します。
なぜですか?
EDIT:
私はTreeSetのは、設定を拡張したSortedSetを拡張するのNavigableSetを実装していることを知っています。私は、TreeSetがNavigableSetとして認識されることが理にかなっていることを知っています。しかし、NavigableSetはTreeSetとして認識されるべきではありません。
この質問のポイントはそれほど実用的ではありませんが理論的です。 (私はテストのために勉強しています。コードがコンパイルされているかどうかを知る必要があります)。 tailSetがTreeSetを返した場合、どうしてこれはコンパイルされませんか?
TreeSet<String> tree = mytreeset.tailSet("xx");
なぜキャストをTreeSetに追加する必要がありますか?
私は犬を買うためにペットショップに行きましたが、後で家で調べると、私は彼らが私をドーベルマンに売却したのを見ました!彼らは私に嘘をついた!まあ、いいえ、彼らはしませんでした。 Dobermanは一種の犬であり、TreeSetは一種のSortedSetです。我々は約束されたものを得た。 – user2357112
私はそれを知っています。しかし、Set <= SortedSet <= NavigableSet <= TreeSet APIが正しいと判断し、SortedSetを返した場合、それはTreeSetであってはなりません。 –
"Dog <= Doberman。APIが言うことが正しいと犬を返すならば、それはDobermanではありません。"それは理にかなっているように聞こえますか?それは一種の魚のように聞こえるよね? – user2357112