5

Java 8 では、インターフェイスにデフォルト メソッドが導入され、コレクション インターフェイスの実装に下位互換性が提供され、レガシー ライブラリでの MethodNotFound エラーが回避されました。

つまり、List の Java 7 実装を含むライブラリは、stream() メソッドを実装しません。Java 8 コードがこのライブラリを使用する場合、デフォルトの実装はフォールバックを提供します。

私が実際に目にしたのは、多くの開発者がこの機能を過度に熱心に使用して、scala トレイトに似たスタイルでミックスインと多重継承をエミュレートしていることです。

私の懸念の 1 つは、このスタイルのプログラミングがインターフェイス (つまり、コントラクト) とその実装の間の境界線をあいまいにし、その結果、隠れた密結合を導入し、制御の反転に違反することです。私の単体テスト、単体テストレベルで存在してはならない動作を抑制します。

このデフォルトメソッドの使用はアンチパターンですか、それとも私だけがこれを疑っていますか?

4

1 に答える 1