/**只有一个抽象方法的接口就是函数式接口
* @author Wings
* 与Override作用相同,用于报错
*/
@FunctionalInterface
interface Moveable{
void move();
// 接口里可以有静态方法
static int sum(int a,int b) {
return a+b;
}
// 接口里的方法可以有方法体,要用default修饰
default void foo() {
System.out.println("foo方法");
}
}
public class LambdaTest {
public static void main(String[] args) {
Moveable mv = new Moveable() {
// 类体,通常就是实现抽象方法
@Override
public void move() {
System.out.println("匿名内部类里!");
}
};
mv.move();
mv.foo();
Moveable mv2 = () -> System.out.println("lambda写法!!");
mv2.move();
mv2.foo();
}
}
带参数:
@FunctionalInterface
interface TestParam
{
void methodAddParam(String name,int age);
}
public class LambdaTest {
public static void main(String[] args) {
TestParam t1 = (name,age) -> {
System.out.println("只有一个抽象方法,因此必定重写!");
System.out.println("name:"+name);
System.out.println("age:"+age);
};
t1.methodAddParam("Wings",26);
}
}
@FunctionalInterface
interface Moveable
{
void move(String param);
}
public class LambdaTest2
{
public static void main(String[] args)
{
Moveable mv = param -> {
System.out.println("只有一个参数可以:"+param);
};
mv.move("省略括号");
Moveable mv2 = parameter -> System.out.println("只有一个语句可以:"+parameter);
mv2.move("省略花括号");
}
}
@FunctionalInterface
interface Func
{
int cal(int n);
}
/**
* 返回值
* @author Wings
*/
public class LambdaTest3
{
public static void main(String[] args)
{
// 方法体只有一条语句且为返回值则省略花括号
Func fn1 = n -> n * n;
// 9
System.out.print(fn1.cal(3));
}
}