私は Map および SortedMap Java 7からのドキュメントを見ていて、SortedMap
がMap
は、entrySet()
、keySet()
およびvalues()
をオーバーライドします。
AFAIK、インターフェイスはJavaの前にJava 8.で)メソッドを実装できません。これらのメソッドをオーバーライドする理由は何でしたか?
異なるドキュメントを提供できるように、メソッドが単にオーバーライドされているように見えます。
3つの方法すべてについて、ドキュメンテーションの唯一の違いは、SortedMap
バージョンが「セットのイテレータがキーの昇順でエントリを返す」ことを追加することです。メインの説明に、「キーの昇順でソートされて」戻り値の説明に。
追伸明らかなフォローアップの質問は、これらの3つのメソッドシグネチャがSortedSet
ではなくSet
を返すように変更されなかった理由です。 Java言語はこの種の変更を許可しているようで、SortedSet
の追加のメソッドを実装するのは簡単であるように思われるため、残念ながら私はこれの理由を思い付くことができません。
Java 7)のJava言語仕様 から:
メソッドのシグネチャを確認する以外に、オーバーライドするメソッド宣言によって実行できるすべてのことは、戻り値の型を調整するか、メソッドの実装によってスローされる可能性のある例外を制限することです。
したがって:throws
署名を変更したり、元の戻り値の型のより具体的なサブ型を指定したりできます。例えば:
interface Foo {
Foo get() throws IOException;
}
interface Bar extends Foo {
Bar get() throws RuntimeException;
}
どちらか一方のthrows
句を完全に省略しているように、完全に合法です。
(Java 7)で)親インターフェースメソッドを「オーバーライド」できるインターフェースメソッドなどはないと思います。「オーバーライド」メソッドを持つことができるのは(サブ)クラスだけです。 SortedMapとMapはクラスではなくインターフェイスであるため、表示されているのは技術的な問題ではなく、単なるドキュメントの問題です。
(そして、サブインターフェイスによるオーバーロードは別の話ですが、引用しているメソッドは同じシグネチャを持っているため、オーバーロードではありません。)