私はJavaを学んでいるだけなので、可能な選択肢やそのような設計の決定に影響することは難しいです。Java 8のインタフェースにデフォルトのメソッドを追加するのはなぜ良い選択であり、何が選択肢なのですか
のJava 8は、インタフェースが実装を有することを可能にするインターフェースへデフォルトメソッド機能を追加します。 これにより、クライアントを壊すことなく新しい方法で既存のインターフェイスを拡張し、下位互換性のある方法で時間をかけてインターフェイスを展開することができます。 しかし、既定の実装では、このような拡張は幾分制限されており、インターフェイスまたはライブラリメソッドの既存のインターフェイスメソッドを使用して実装される可能性があります。 私の質問は
- なぜこの言語機能が導入されたのですか?
- どのような主な新機能がサポートされていますか? (Splititeratorsなど)
- これらの言語機能をサポートするために他にどのような方法がありましたか?例えば、Iterableを継承する新しいインタフェースSplitIterableを作成しないでください。
- これらの代替案を実装した場合の影響(インターフェイスの徹底化)
- 他のメソッドのコンポジションとしてインプリメントすることが可能な場合、インタフェースの第1版のメソッドのデフォルト実装を提供する必要がありますか?
すてきな質問です。個人的に私はこのアイデアが嫌いで、インターフェイスはまさにそうだと思う。つまり実装が全くない。 – Bathsheba
[Streaming API](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html)関連のメソッドをコレクションに導入できるように追加されましたコレクションインターフェイスのカスタム実装を壊すことなく –
Brian Goetzの論文[「public defender」メソッドによるインターフェイスの進化](http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v3.pdf)および関連するスタックオーバーフローに関する質問["Java 8のデフォルトメソッドはソースの互換性を損なっていますか?"](http://stackoverflow.com/questions/31188231)。 –