1.函数式接口
- 什么是函数式接口?接口中抽象方法的个数只有一个的接口称为函数式接口。
- 语法:
// 函数式接口的注解
@FunctionalInterface
public interface La {
// 抽象方法
void af();
// 默认方法
default void df() {}
// 静态方法
static void sf() {}
}
- 注意:JDK8.0之后增加了默认方法、静态方法、静态内部类型。
- JDK8之后接口中的成员可以是如下:
- 常量
- 抽象方法
- 静态方法
- 默认方法
- 静态内部类型(静态内部类,静态内部接口,静态内部枚举)
2.Lambda表达式
- Lambda表达式的目的是为了让书写更简单
- Lambda表达式书写举例:
@FunctionalInterface
interface MysubString {
String subStr(String s, int start, int end);
}
public class Test1 {
public static void main(String[] args) {
// 利用匿名内部类实现
MysubString mysubString = new MysubString() {
@Override
public String subStr(String s, int start, int end) {
return s.substring(start,end);
}
};
// 利用Lambda表达式实现
MysubString m1 = (s,start,end) -> {return s.substring(start,end);};
}
}
- 注意事项
3.方法引用书写
- 引用类方法(静态方法)
- 语法: 类名::方法名
- 代码实现
La1 la1 = (s) -> {return Integer.parseInt(s);};
// 引用类方法 类名::类方法
La1 la2 = Integer::parseInt;
- 引用特定对象的实例方法
- 语法:特定对象::实例方法
La1 la3 = (s) -> {return "hello".indexOf(s);};
// 引用特定对象的实例方法 特定对象::实例方法
La1 la4 = "hello"::indexOf;
- 引用某类对象的实例方法
- 语法:类名::实例方法
La1 la5 = (s) -> {return s.length();};
// 引用某类对象的实例方法 类名::实例方法
La1 La6 = String::length;
- 引用构造器
- 语法:类名::new
La2 la7 = (name) -> {return new Student(name);};
// 引用构造器 类名::
new La2 la8 = Student::new;