我们先来看一个普通的Lambda表达式
我们创建一个包 下面创建一个接口 testInterface
参考代码如下
public interface testInterface {
int eat(int max,int min);
}
text 测试类 参考代码如下
public class text {
public static void main(String args[]) {
newTestInterface((int max,int min)-> {
return (max+min);
});
}
public static void newTestInterface(testInterface test){
System.out.println(test.eat(12,5));
}
}
这里 我们接口定义了一个抽象方法 eat 他接收两个int类型的变量 返回一个int类型的值
然后 我们在测试类中定义方法newTestInterface 接收一个testInterface 对象
然后 我们通过调用 newTestInterface 利用Lambda表达式 简写了一个内部实现 将eat实现为返回两个值相加
newTestInterface的方法体中 输出了eat获取到的返回值
然后 我们运行结果如下
没有任何问题 但这里 我们可以省略一些写法
例如 参数的类型
我们将测试类的main 更改成这样
public static void main(String args[]) {
newTestInterface((max,min)-> {
return (max+min);
});
}
运行之后 你会发现一切正常 说明Lambda表达式中 参数类型是可以省略的
但是 这里有个规定 要么都省了 要么都省略 就好像 你一个写了类型 一个又没写 那就报错了 开发工具不是菜市场 不支持你买半只
除了参数 参数外的括号在单个参数情况下也可以省略
我们整体代码修改一下
testInterface 接口 修改如下
public interface testInterface {
int eat(int min);
}
测试类代码修改如下
public class text {
public static void main(String args[]) {
newTestInterface(min-> {
return min;
});
}
public static void newTestInterface(testInterface test){
System.out.println(test.eat(5));
}
}
这次 我们的main方法中的表达式 参数外面的包裹括号 显然就没了 这是在只有一个参数的情况下 可以不写这对小括号 多个参数 还是要用它的
然后 就是 如果代码块中 只有一行代码 可以省略大括号和分号
我们再将整体代码修改如下
testInterface接口
public interface testInterface {
void eat(int min);
}
测试类 代码如下
public static void main(String args[]) {
newTestInterface(min-> System.out.println(min));
}
public static void newTestInterface(testInterface test){
test.eat(5);
}
这里可以明显看到 我们的Lambda中去掉了方法体上的大括号
但这里可以注意到 我是特意将方法改成没有返回值的了
因为你一行代码上用 return返回 是会报错的
但其实 有return也可以这样写 return 一起省略就好了
我们将代码整体修改如下
testInterface接口
public interface testInterface {
int eat(int min);
}
text 测试类 参考代码如下
public class text {
public static void main(String args[]) {
newTestInterface(min-> min);
}
public static void newTestInterface(testInterface test){
System.out.println(test.eat(5));
}
}
这里 就是我们之前的代码 返回和大括号一起去掉 就可以了
运行结果如下