1. 函数式接口
当一个接口中只有一个非 default 修饰的方法,这个接口就是一个函数式接口用
@FunctionalInterface 标注
1)只有一个抽象方法
@FunctionalInterface
public interface MyInterface {
void print(int x);
}
2)只有一个抽象方法和一个 default 方法
@FunctionalInterface
public interface MyInterface {
void print(int x);
// 1.8 之后接口可以有默认实现方法
default String getValue(){
return "value";
}
}
3)只有一个抽象方法和多个 default 方法
@FunctionalInterface
public interface MyInterface {
void print(int x);
// 1.8 之后接口可以有默认实现方法
default String getValue(){
return "value";
}
default int getAge(int age){
return age;
}
}
2. 使用 lambda 表达式返回函数式接口对象
当使用函数式接口中的的唯一非 default 方法时,传统的做法是先写一个接口的实现类,给出接口中抽象方法的具体实现,然后 new 一个该类的实例化对象,在调用重写后的方法,步骤比较繁琐,lambda 可以快速实现该方法的实现和调用
创建一个接口
@FunctionalInterface
public interface MyInterface {
void print(int x);
// 1.8 之后接口可以有默认实现方法
default String getValue(){
return "value";
}
}
使用 lambda 表达式返回一个该接口对象,并给出该方法的具体实现
public class MyClass {
public static void main(String[] args) {
MyInterface myinterface = x -> System.out.println("x ="+ x);
myinterface.print(12344);
}
}
lambda 表达式语法
语法格式: () -> {};
# () 中代表的是接口中抽象方法的参数值
# {} 中代表该方法的具体实现
# () -> {}; 的返回值是接口的一个实例化对象
3. Runnable 接口
Runnable 接口是用来创建线程的一个接口,是一个典型的函数式接口
源码如下:
通过 Lambda 表达式创建线程
public class Test1{
public static void main(String[] args) {
Runnable runnable = () -> System.out.println("this a thread");
runnable.run();
}
}
4. Callable 接口
Callable 接口是用来创建线程的一个接口,是一个典型的函数式接口
源码如下:
通过 Lambda 表达式创建线程
public class MyCallable {
public static void main(String[] args) throws Exception {
Callable<Integer> callable = () -> {
System.out.println("this a thread");
return 1;
};
callable.call();
}
}