函数式接口
概念:函数式接口在Java中是指:有且仅有一个抽象方法的接口。
格式:
修饰符 interface 接口名{
一个抽象方法
}
e:
public interface DemoSum {
public abstract int sum(int a, int b);
}
public class DemoTest {
public static void inta(int a, int b ,DemoSum sum){
int s=sum.sum(a, b);
System.out.println(s);
}
public static void main(String[] args) {
//常用的方法
inta(10, 20, new DemoSum() {
@Override
public int sum(int a, int b) {
return a+b;
}
});
//简化
inta(20,50,(a,b)->a+b);
}
}
简化后只有一行是不是简单多了。
如何简化:
- 一个函数试接口
- 在一个类中把接口作为参数传递
e:
@FunctionalInterface
public interface DemoSsy {
public abstract void dog();
}
public class DomeDoger {
public void eat(DemoSsy dog){
System.out.println("我在吃骨头");
}
}
然后我们在main方法中调用这个方法
当参数试一个函数式接口我们可以用箭头来表示
public static void main(String[] args) {
new DomeDoger().eat(()->{
System.out.println("我在吃骨头");
}
);
}
eat后面的括号代表参数的个数因为我们没有参数可以不写
当我们在函数体内只有一条语句时括号和分号可以省略
public static void main(String[] args) {
new DomeDoger().eat(()->System.out.println("我在吃骨头"));
}
注意:省略时必须同时省略
@FunctionalInterface注解
与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于一个接口的定义上:
@FunctionalInterface
public interface DemoSsy {
public abstract void dog();
}
一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。需要注 意的是,即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。