方法引入:
什么是方法引入?
方法引入:需要结合lambda表达式能够让代码变得更加精简。
- 匿名内部类使用
- Lambda调用匿名内部类
- 方法引入
方法引入的四大分类
- 静态方法引入 类名::(静态)方法名称
- 对象方法引入 类名:: 实例方法名称
- 实例方法引入 new对象 对象实例::方法引入
- 构造函数引入 类名::new
1. 静态方法引入 类名::(静态)方法名称
public static void main(String[] args) {
//静态方法引入
TestInterface testInterface=Test017::getName;
System.out.println(testInterface.getName("静态方法引入"));
}
public static String getName(String name){
return name;
}
@FunctionalInterface
public interface TestInterface {
String getName(String name);
}
注意点:静态方法的参数和返回值需要与函数接口的方法参数保持一致
2. 对象方法引入 类名:: 实例方法名称
public class Test017 {
public static void main(String[] args) {
//对象方法引入引入
TestInterface testInterface=Test017::getName;
System.out.println(testInterface.getName(new Test017()));
}
public String getName(){
return "对象方法引入";
}
}
函数接口
@FunctionalInterface
public interface TestInterface {
String getName(Test017 test017);
}
注意点:函数接口的参数是对象,函数接口和调用目标方法返回值一致,参数不一致
3. 实例方法引入 new对象 对象实例::方法引
public class Test017 {
public static void main(String[] args) {
//实例方法引入
Test017 test017 = new Test017();
TestInterface testInterface=test017::getName;
System.out.println(testInterface.getName("实例方法引入"));
}
public String getName(String name){
return name;
}
}
函数接口:
@FunctionalInterface
public interface TestInterface {
String getName(String name);
}
注意点:函数接口返回值和参数和方法保持一致
4. 构造函数引入 类名::new
public class Test017 {
public static void main(String[] args) {
//构造函数方法引入
TestInterface testInterface=UserEntity::new;
System.out.println(testInterface.getName("构造函数方法引入"));
}
}
函数接口:
@FunctionalInterface
public interface TestInterface {
UserEntity getName(String name);
}
实体:
public class UserEntity {
private String userName;
private int age;
public UserEntity() {
}
public UserEntity(String userName, int age) {
this.userName = userName;
this.age = age;
}
public UserEntity(String userName) {
this.userName = userName;
}
public UserEntity(int age) {
this.age = age;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "UserEntity{" +
"userName='" + userName + '\'' +
", age=" + age +
'}';
}
}
注意点:构造方法的参数要和函数接口的参数保持一致,函数接口的多返回值和构造函数一致