1.对象::实例方法
1.将Lambda表达式 替换为 【对象::实例方法】 的写法。
2.确保 【实例方法】 的 参数与返回值 和 Lambda表达式的一致!
2.案例代码
本案例从 匿名内部类 --> Lambda 表达式 --> 方法引用 【对象::实例方法】 的思路进行编码演示,一步一步的感受代码的变化。
2.1 准备一个普通的类,包含一个实例方法
package com.northcastle.H_method_reference;
public class MethodReference {
public String handleString01(String inParam){
System.out.println("方法引用中接收到的参数 : "+inParam);
String outParam = "C "+inParam;
return outParam;
}
}
2.2 编写测试主类
package com.northcastle.H_method_reference;
import java.util.function.Function;
public class InstanceNameMethodName {
public static void main(String[] args) {
String inParam = "Java从入门到精通";
String s1 = showMessage(new Function<String, String>() {
@Override
public String apply(String s) {
System.out.println("匿名内部类中接收到的参数 : "+s);
return "A "+s;
}
},inParam);
System.out.println("匿名内部类的写法 : s1 = "+s1);
System.out.println("=====================");
System.out.println();
String s2 = showMessage(ip -> {
System.out.println("Lambda 表达式中接收到的参数 :"+ip);
return "B " + ip;
}, inParam);
System.out.println("Lambda表达式的写法 :s2 = "+s2);
System.out.println("=====================");
System.out.println();
MethodReference mr = new MethodReference();
String s3 = showMessage(mr::handleString01, inParam);
System.out.println("【对象::方法名】 方式的方法引用写法 : s3 = "+s3);
System.out.println("=====================");
System.out.println();
}
public static String showMessage(Function<String,String> function,String inParam){
String outParam = function.apply(inParam);
return outParam;
}
}
2.3 执行结果
三种方式的运行结果都正确!
2.4 代码分析(必读)
1.MethodReference.handleString01(String) 方法的 【参数为一个String对象】,【返回值为一个String 对象】;
2.测试类InstanceNameMethodName.main() 方法中的 第二种Lambda表达式的写法,
实际上是对 Function<String,String> 接口中的 apply() 方法的重写,
apply() 方法的 【参数为一个String对象】,【返回值为一个String 对象】;
3.由此分析,两种方案满足 方法引用的前提 : 【实例方法】 的 参数与返回值 和 Lambda表达式的一致!
且 方法体的逻辑处理内容一致,故可以进行【方法引用的操作】。
3.完成
Congratulations! You are one step closer to success!
|