1.1函数式接口:
1.1.2 概念和格式:
- 什么是函数式接口:
- 接口中有且只有一个抽象方法则称为函数式接口。
- 常见的函数式接口:
- Runnable、Callable、Comparator、FileFilter
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
1.1.3 格式:
修饰符 interface 接口名称{ public abstract 返回值类型 方法名称(可选参数信息); //其他非抽象方法内容 } 由于接口中的抽象方法public abstract 是可以省略的,所以定义一个函数式接口非常简单: public interface MyFunctionInterface{ void myMethod(); }
1.2 @FunctionalInterface注解:
- JDK1.8新特性。
- 作用:用来修饰接口,告诉编译器该接口是函数式接口,如果不是则会编译失败。
1.3.1 自定义函数式接口(无参无返回):
- 请定义一个函数式接口`Eatable`,内含抽象`eat`方法,没有参数或返回值。使用该接口作为方法的参数,并进而通过Lambda来使用它。
@FunctionalInterface
public interface Eatable {
void eat();
}
public class FunctionalInterfaceDemo {
public static void main(String[] args) {
//使用匿名内部类调用
testEatable(new Eatable() {
@Override
public void eat() {
System.out.println("学习饿了要大口吃肉");
}
});
//使用Lambda表达式简化匿名内部类
testEatable(()-> System.out.println("学习java饿了要吃饭"));
}
public static void testEatable(Eatable e){
e.eat();
}
}
1.3.2 自定义函数式接口(有参有返回):
- 请定义一个函数式接口`Sumable`,内含抽象`sum`方法,可以将两个int数字相加返回int结果。使用该接口作为方法的
参数,并进而通过Lambda来使用它。
@FunctionalInterface
public interface Sumable {
int sum(int a,int b);
}
public class FunctionInterfaceDemo02 {
public static void main(String[] args) {
//使用匿名内部类调用
testSumable(new Sumable() {
@Override
public int sum(int a, int b) {
return a+b;
}
});
//使用Lambda表达式调用
testSumable((x,y)->x+y);
}
public static void testSumable(Sumable s){
int result = s.sum(1,2);
System.out.println(result);
}
}
版权声明:本文为博主原创文章,转载请注明出处:https://blog.csdn.net/Huangyuhua068/article/details/81673817
交流学习:sunnyh1996@126.com