問題タブ [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 8 のこのチュートリアルを読んでいました。
そして言った
ラムダ式内からデフォルトのメソッドにアクセスすることはできません。次のコードはコンパイルされません。
しかし、彼はそれが不可能な理由を説明しませんでした。コードを実行したところ、エラーが発生しました。
互換性のない型: 数式は機能的なインターフェイスではありません`
では、なぜそれが不可能なのか、またはエラーの意味は何ですか? このインターフェースは、1 つの抽象メソッドを持つ関数インターフェースの要件を満たします。
java - この Java の例の「super」キーワードについて混乱している
この例では、Java Web サイトのチュートリアルページ. 2 つのインターフェイスが同じデフォルト メソッドを定義していますstartEngine()
。クラスは両方のインターフェイスを実装し、明らかな競合のためにFlyingCar
オーバーライドする必要があります。startEngine()
from がinとinterfacesの両方のバージョンを参照するために使用されるFlyingCar
理由がわかりません。私が理解しているように、どのスーパークラスでも定義されていないため、常駐とは見なされません。また、 と で実装されている 2 つのインターフェイスの関係もわかりません。super
startEngine()
OperateCar
FlyCar
startEngine()
super
FlyingCar
java - UML: Java Defender またはデフォルトのメソッド
Java 8 のリリース以降、インターフェースでメソッドのデフォルト実装を提供できるようになりました。
UML でこれを実現する方法を探していましたが、問題については何も見つかりませんでした。インターフェイスのデフォルト実装のケースは、UML 仕様で採用するには特殊すぎる可能性があります。
しかし、それでも質問:
これらの既定のメソッドを UML で表示する方法はありますか?
java - Javaでは、ヘルパーメソッドは静的またはインスタンスであるべきですか?
この質問は以前に他の人から回答があったことは知っていますが、状況によって回答が異なるようです。
クラスをインスタンス化して、テストやモックなどを実行できるようにする必要があると多くの人が言っています。これが私のコードで、簡単に単体テストできるように見えます。
WebsiteLogin.java Website.java を拡張し、login() と呼ばれる void メソッドを含むインターフェースで、Username、Password、Url の 3 つの文字列を取ります。
AccountLogin.java Account を拡張するインターフェースであり、Username、Password、および Url の getter メソッドと、ブール値を取る setEnabled() メソッドが含まれています。
Login.java という別のクラスには、WebsiteLogin と AccountLogin を受け取るメソッド login() があります。このクラスにはメソッドが 1 つしかありません。
これがコードです
そのため、ログインしてから、アカウントを有効に設定します。このメソッドは静的ですが、スタブ化された LoginToWebsite をメソッドに送信することで動作をテストできます。私はここで正しいですか?では、静的メソッドを使用しない理由は他にあるのでしょうか?
もう 1 つの質問は、Java 8 とインターフェイスのデフォルト メソッドを使用して、次のように Login.java というインターフェイスを作成できますか。
次に、別のクラスで Login.java クラスを実装し、呼び出すだけです
それとも、これは悪い習慣ですか?
java - インターフェイスの既定のメソッドが必要な理由
Java 8 のデフォルト メソッドの学習。 インターネット上の他のリソースと同様に、このリンクは言う
「最も厳密な意味」では、デフォルトのメソッドは、インターフェイスをコードで「汚染」できるため、一歩後退しています。しかし、下位互換性を可能にする最も洗練された実用的な方法を提供します。Oracle がすべての Collections クラスを更新し、Lambda 用に既存のコードを改良することがはるかに簡単になりました。
私の理解では、Java 8 dev/designers がインターフェースでデフォルトのメソッドを提供したため、実装するすべてのクラスが同じ動作を不必要にオーバーライドする必要がなくなり、下位互換性が提供されます。例:- ForEach メソッドがデフォルトのメソッドではない場合、クラスを実装するすべてのコレクションがそれを実装する必要がありました。同意した。
これを克服するには、これらのデフォルト メソッドの実装を提供する 1 つのクラスを用意し、arraylist などのクラスを実装してそれを拡張することができます。このようにして、Java の基礎、つまり再利用性と抽象化、つまりインターフェースの汚染を少なく保つことの両方を達成することができました。
Java 8 dev/designer はすでにこれについて考えていると確信しています。私たち開発者もこの大きな変更を把握できるように、誰かがここで助けてくれませんか?
java - コア Java インターフェイスの再利用性
method1()
2 つのメソッドを持つ「TestInterface」という Java インターフェイスはmethod2()
、100 の異なるクラスによって実装されます。TestInterface
ここで、既に実装されている他のクラスを変更せずに、新しいメソッドを導入する必要があります。Javaでそれを達成するにはどうすればよいですか?
java - なぜ Delayed は compareTo のデフォルト メソッドを提供しないのですか?
インターフェイスDelayedには、
このインターフェイスの実装は、その getDelay メソッドと一致する順序を提供するcompareToメソッドを定義します。
しかし、Java 8 にデフォルトの実装がないのはなぜでしょうcompareTo
かgetDelay
。
これが実装クラスに残されている特定の理由はありますか? それとも、スーパーインターフェイスを上書きするときにデフォルトメソッドを作成することはできませんか?
編集:私の質問をより理解しやすくするために、ここに例を示します: