問題タブ [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.

0 投票する
1 に答える
1052 参照

locking - Java 8 が `withLock` デフォルト メソッドを `java.util.concurrent.locks.Lock` インターフェイスに追加しなかったのはなぜですか?

この質問と同じように、Java チームがLockインターフェースに次のようないくつかのデフォルト メソッドを追加しなかったのはなぜだろうかと思います。

これにより、プログラマーは次のことができるようになります

それ以外の

0 投票する
4 に答える
34589 参照

java - Java 8 拡張機能/デフォルト メソッドをクラスに追加

C# 拡張メソッド機能に相当する Java を探しています。今、私はJava 8のデフォルトメソッドについて読んでいますが、私が見る限り、これらはインターフェースにしか追加できません...

...インターフェイスを実装しない最終クラスの拡張メソッドを記述できる言語機能はありますか? (巻かなくてもいいのに…)

0 投票する
1 に答える
14140 参照

java - 親インターフェイスのデフォルト メソッドを、そのインターフェイスをサブクラス化するインターフェイスから呼び出すことはできますか?

Java 8では、次のようなものがあります:

匿名の内部クラスを作成してそれを呼び出すことなく、implementsB からデフォルトの機能インターフェイスの動作を呼び出す方法はありますか?

これには副作用があり (implementsA のメソッドを 2 回呼び出す)、必要な場合は親の実装への呼び出しが必要であり、必要に応じていくつかの特殊化と共に、子の実装で子の既定の実装を呼び出すことができます。ご覧のとおり、親の実装を呼び出すのは非常に簡単ですが、子インターフェイスを実装するクラスに間接レイヤーを追加しない限り、デフォルトの実装を書き直さないようにする方法がわかりません。また、それを強制する方法もありません。 .

たとえば、A がデータベースなどのリソースへのアクセスをロック解除または提供し、B が 2 番目のリソース (別のデータベース) のロックを解除した場合、コードで A をロック解除し、B が機能インターフェイスを使用してこのコントラクトを強制する方法がわかりません。 AとBが呼び出されます。 1 レベルの深さでは実行できますが、N レベルの深さでは不可能のようです。

私はラムダを使用して、コストのかかる呼び出しを回避し、ライブラリのユーザーに操作の意味的な順序を強制するつもりでした。

この質問は、「Java で既定のメソッドを明示的に呼び出す」とはまったく同じではありません。この質問は、親インターフェイスの既定のメソッドを呼び出すだけでなく、N レベルの深さのインターフェイスに関するものであるためです

0 投票する
1 に答える
248 参照

java - パッケージ外のインターフェースの継承を防ぐ

パッケージの外部から継承してはならないステートレスな抽象基本クラスがあります。

Java 8 がインターフェイスでデフォルト メソッドをサポートするようになったので、抽象クラスをインターフェイスに変換したいと思います。インターフェイスを使用して、現在のパッケージの外部で継承を防ぐこともできますか?

0 投票する
2 に答える
99 参照

java - インターフェースのデフォルトメソッドはコマンドプロンプトで実行されますが、Eclipseでは実行されません

インターフェイスでデフォルトのメソッドを使用しようとしていましたが、Eclipse でコンパイルすると 2 行目でエラーが発生します - デフォルトの削除と表示されますが、コマンド プロンプトでコンパイルして実行すると正常に動作しますが、これの理由は何でしょうか?

0 投票する
1 に答える
6907 参照

unit-testing - インターフェイス (Java 8) のデフォルト メソッドの単体テストを行う必要がありますか?

Java 8 で導入されたインターフェースのデフォルト メソッドの実装について少し混乱しています。インターフェースとその実装メソッド専用の JUnit テストを作成する必要があるかどうか疑問に思っていました。グーグルで検索してみましたが、ガイドラインが見つかりませんでした。お知らせ下さい。

0 投票する
3 に答える
247 参照

java - Java 8 での完全な多重継承

Java 8 では、インターフェイスで Static および Default メソッドを使用して、以下のような単純なフレームワークで本格的な継承が可能になっているようです。

誤用したり愚かなコードを書いたりする可能性は常にありますが、これらの新機能により、言語の設計者がそれを避けるつもりであったとしても、多重継承を非常に簡単に実現できます。

これはインターフェイスを基本クラスとして使用する多重継承の単純な実装ですか、それとも言語の誤用ですか? Java 設計者はこれを許可するのに行き過ぎたのでしょうか?

/////////////////////////////////////////////// /

またはさらに別のオプションの場合:

0 投票する
3 に答える
2768 参照

java - Java のデフォルト インターフェイス メソッド

Java チュートリアルの簡単なコードを次に示します。

エラーが表示されます: タイプ インターフェイス メソッドの不正な開始は本体を持つことができません。メソッドは default であり、default キーワードはメソッド シグネチャの先頭で使用されます。何が間違っているのか説明していただけますか?