我在 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
这个功能可以吗?是有意的吗?
如果重写将在实现类中完成,并且实现会在某个时候发生变化,那么在调用该方法的每个地方,行为都是相同的,我们将保持一致性。但是,如果我像示例中那样通过 lambda 表达式更改行为/实现,则该行为将仅在下一次更改之前有效,稍后在流程中。这感觉不可靠且难以遵循。
编辑:@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 甚至是最终结果,你将如何用类重写它?