我正在学习lambda,我知道3步规则:
MyInterface myInterface = new MyInterface()
{
@Override
public void printMe(String message) {
System.out.println(message);
}
};
答案是
MyInterface myInterface = new MyInterface(message -> message);
或者
MyInterface myInterface = message -> System.out.println(message);
或者我可能都错了......?
答案 0 :(得分:3)
第二种选择是正确的。但请注意,您可以使用方法引用进一步清理代码:
MyInterface myInterface = System.out::println;
答案 1 :(得分:1)
MyInterface myInterface = new MyInterface(message -> message);
上面的代码行为您提供了编译错误。您的上一个选项是正确的。
您可以使用method reference
或撰写自己的lambda
表达式
MyInterface myInterface = System.out::println; // using method reference
或
MyInterface myInterface = message-> System.out.println(message);
答案 2 :(得分:0)
我将添加一个重点来完成其他答案:
您可以在函数的上下文中使用lambda表达式 接口(简而言之,功能接口是一个接口 只指定一个抽象方法)
因此,您的界面 MyInterface
应该是一个功能界面。
调用功能界面中的抽象方法
function descriptor
,所以为了给一个lambda表达式赋值 功能接口,lambda应该具有相同的签名 抽象方法
例如,您的接口MyInterface
仅接收带有字符串参数的lambda,并且不返回任何内容(void)。
其他
java.util.function
包中包含许多可以帮助您处理和使用lambdas的Functional接口,因此我们可以说您的接口是Consumer类型,这是一个功能接口输入中的对象和(使用它)返回void,请参阅Package java.util.function