私はJava 8で機能的なインターフェースを持っています:
public interface IFuncLambda1 {
public int someInt();
}
主に:
IFuncLambda1 iFuncL1 = () -> 5;
System.out.println("\niFuncL1.someInt: " + iFuncL1.someInt());
iFuncL1 = () -> 1;
System.out.println("iFuncL1.someInt: " + iFuncL1.someInt());
これを実行すると、次のようになります。
iFuncL1.someInt: 5
iFuncL1.someInt: 1
この機能はそのままでいいのでしょうか?それは意図されていますか?
オーバーライドが実装クラスで行われ、ある時点で実装が変更される場合、そのメソッドが呼び出されるすべての場所で動作が同じになり、一貫性が保たれます。しかし、例のようにラムダ式を使用して動作/実装を変更すると、その動作はフローの後半で次の変更まで有効になります。これは信頼性が低く、従うのが難しいと感じます。
編集: @assylias someInt() の動作がどのように変更されたかわかりません... someInt にパラメーターを追加し、次のコードを使用するとどうなりますか:
IFuncLambda1 iFuncL1 = (x) -> x - 1;
System.out.println("\niFuncL1.someInt: " + iFuncL1.someInt(var));
iFuncL1 = (x) -> x + 1;
System.out.println("iFuncL1.someInt: " + iFuncL1.someInt(var));
var が最終的な偶数である場合、それをクラスでどのように書き直しますか?