問題タブ [default-method]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Javaには、デフォルトメソッド(java8)が抽象クラスの代替になる予定がありますか?
default method
Java には に代わる 計画がありAbstract Class
ますか? Abstract の代わりにデフォルト メソッドを使用する実際のケースが見つかりませんでしたか?
java-8 - javaインターフェースのデフォルトメソッドはアンチパターンですか?
Java 8 では、インターフェイスにデフォルト メソッドが導入され、コレクション インターフェイスの実装に下位互換性が提供され、レガシー ライブラリでの MethodNotFound エラーが回避されました。
つまり、List の Java 7 実装を含むライブラリは、stream() メソッドを実装しません。Java 8 コードがこのライブラリを使用する場合、デフォルトの実装はフォールバックを提供します。
私が実際に目にしたのは、多くの開発者がこの機能を過度に熱心に使用して、scala トレイトに似たスタイルでミックスインと多重継承をエミュレートしていることです。
私の懸念の 1 つは、このスタイルのプログラミングがインターフェイス (つまり、コントラクト) とその実装の間の境界線をあいまいにし、その結果、隠れた密結合を導入し、制御の反転に違反することです。私の単体テスト、単体テストレベルで存在してはならない動作を抑制します。
このデフォルトメソッドの使用はアンチパターンですか、それとも私だけがこれを疑っていますか?
java-8 - Java 8 は、インターフェイスのデフォルト メソッドを解決するために提供した複数の継承を許可する同じソリューションを提供しません。
問題:
Java が複数のクラスを拡張することを許可していないことはわかっています。これは、コンパイラがどのスーパークラス メソッドを使用するかを決定できなくなるダイヤモンド問題が発生するためです。インターフェイスのデフォルト メソッドでは、ダイヤモンド問題がJava 8で導入されました。つまり、クラスが 2 つのインターフェイスを実装し、それぞれが同じ既定のメソッドを定義し、実装するクラスが共通の既定のメソッドをオーバーライドしない場合、コンパイラはどちらの実装を選択するかを決定できなかったからです。
解決:
Java 8では、複数のインターフェースによって実装されるデフォルト メソッドの実装を提供する必要があります。したがって、クラスが上記の両方のインターフェースを実装する場合、共通のデフォルト メソッドの実装を提供する必要があります。そうしないと、コンパイラはコンパイル時エラーをスローします。
質問:
子クラスによって導入された共通メソッドをオーバーライドすることにより、このソリューションが複数クラスの継承に適用されないのはなぜですか?
java - クラスの初期化方法インターフェースのデフォルトメソッドで?
私はインターフェースを持っています:
エラーメッセージスター付きの行:
ローカル変数 s が初期化されていない可能性があります
ローカル変数 t が初期化されていない可能性があります
このメソッドを使用して、[S.classname][T.classname]で文字列を返したいと思います。これを達成する方法を教えてください。または、インターフェイスでこれを行うことは不可能ですか?
更新: 1 月 12 日
これを行う私の目的は、このクラスがフレームワーク内にあり、人為的エラーを可能な限り減らしたいという事実によるものです。コードを次のように変更しています。
spring-data-rest - Spring データ レスト - デフォルト メソッドを公開する
次のような個人リポジトリがあります
私は休息を通してデフォルトのメソッドを公開することができません..レポの実装を作成せずにそれを行う方法はありますか?