Egor Erofeev:
なぜTreeMap
型のMap
メソッドを定義していません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
クラスの具体的な実装であるTreeMap
、確かにそのような方法を所有していること。
ただ、より詳細な説明を探しています。
ありがとう!
user10367961:
型のオブジェクトは、TreeMap
メソッドを持っているtailMap
、しかし、あなたはタイプの参照を経由して、それを参照されMap
公開されていない、tailMap
方法自体を。コンパイラは文句を言う理由です。
Javaがあることに注意してください静的型付け。コンパイラは、ことを確認する必要があることをこれは意味、コンパイル時にかかわらず、実際の実施の呼び出すメソッドがあること。
あなたが持っている可能性がありますのでMap
、実装定義していないtailMap
方法を、コンパイラはあなたが呼び出すことができませんtailMap
経由で参照されたオブジェクトのメソッドをMap
。
以来NavigableMap
インターフェースはメソッドを定義するtailMap
には、を介して参照されるオブジェクトのメソッドを呼び出すことが可能ですNavigableMap
。あなたが使用している場合にも適用されTreeMap
ているので、参照型としてTreeMap
実装NavigableMap
。コンパイラは2番目と3番目の例(明示的なキャストとに文句を言わない理由ですNavigableMap
参照宣言)。