14

Java 8 のデフォルト メソッドの学習。 インターネット上の他のリソースと同様に、このリンクは言う

「最も厳密な意味」では、デフォルトのメソッドは、インターフェイスをコードで「汚染」できるため、一歩後退しています。しかし、下位互換性を可能にする最も洗練された実用的な方法を提供します。Oracle がすべての Collections クラスを更新し、Lambda 用に既存のコードを改良することがはるかに簡単になりました。

私の理解では、Java 8 dev/designers がインターフェースでデフォルトのメソッドを提供したため、実装するすべてのクラスが同じ動作を不必要にオーバーライドする必要がなくなり、下位互換性が提供されます。例:- ForEach メソッドがデフォルトのメソッドではない場合、クラスを実装するすべてのコレクションがそれを実装する必要がありました。同意した。

これを克服するには、これらのデフォルト メソッドの実装を提供する 1 つのクラスを用意し、arraylist などのクラスを実装してそれを拡張することができます。このようにして、Java の基礎、つまり再利用性と抽象化、つまりインターフェースの汚染を少なく保つことの両方を達成することができました。

Java 8 dev/designer はすでにこれについて考えていると確信しています。私たち開発者もこの大きな変更を把握できるように、誰かがここで助けてくれませんか?

4

3 に答える 3

11

Java 8 より前でinterfacesは、abstract methods. これらのメソッドの実装は、別のクラスで提供する必要があります。したがって、新しいメソッドを に追加する場合はinterface、その実装コードを同じインターフェイスを実装するクラスで提供する必要があります。

この問題を克服するために、Java 8 ではdefault methodsinterface.

実装クラスでメソッドを実装せずに既存のラムダ式を使用できるようdefault methodsに、下位比較可能性を提供するために導入されました。またはとしても知られています。interfacesDefault methodsdefender methodsvirtual extension methods

于 2016-10-08T07:34:57.920 に答える
1

インターフェイスに新しいメソッドを追加する必要がある場合、クラスはインターフェイス内のすべてのメソッドを実装する必要があるため、既存のインターフェイスを使用するクライアントは壊れます。

このシナリオでは、デフォルトおよび静的メソッドを使用できます。これらのメソッドは本体を持つことができ、クライアントはそれらを実装する必要がないため、既存の実装は変更なしで機能します。

たとえば、インターフェイスを拡張してラムダ式を受け入れるメソッドを追加する場合は、デフォルトのメソッドを使用できます。

于 2018-04-20T08:48:48.660 に答える