版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iuie_sl/article/details/55806442
方法引用
方法引用就是直接访问类中的实例或者构造器或者方法,他提供了一种调用方法而不直接执行的方式,方法引用是Lambda表达式的简写,在不需要使用Lambda表达式的时候一帮不需要使用方法引用。==当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。==
方法引用分的分类
- 静态方法引用
- 实例方法引用
- 构造方法引用
静态方法引用实例
//没有实现的接口
public interface StringFunc {
String func(String n);
}
//string倒转的方法
public class MyStringOps {
//静态方法: 反转字符串
public static String strReverse(String str) {
String result = "";
for (int i = str.length() - 1; i >= 0; i--) {
result += str.charAt(i);
}
return result;
}
}
//使用
public class MethodRefDemo1 {
public static String stringOp(StringFunc sf, String s) {
return sf.func(s);
}
public static void main(String[] args) {
String inStr = "lambda add power to Java";
String outStr = stringOp(MyStringOps::strReverse, inStr);
//使用Lambda表达式:String outStr=stringOp((x)->MyStringOps.strReverse(x),inStr);
System.out.println("Original string: " + inStr);
System.out.println("String reserved: " + outStr);
}
}
注释:这里的MyStringOps::strReverse方法相当于接口StringFunc 的func方法的实现。并且整个调用返回StringFunc
实例方法引用
实例方法和上面差不多,但是不能直接调用MyStringOps而是先将他实例化
MyStringOps my=new MyStringOps();
String outStr = stringOp(my::strReverse, inStr);
构造方法引用实例
public interface MyFun {
MyClass fun(int id);
}
public class MyClass {
private int id;
public MyClass(){};
public MyClass(int id) {
super();
this.id = id;
}
public int get(){
return id;
}
}
public class MyFunDome {
public static void main(String[] args) {
//使用Lambda表达式:MyFun my=(x)->{return new MyClass(x);};
MyFun my=MyClass::new;
MyClass c=my.fun(100);
System.out.println(c.get());
}
}
注解:MyFun my=MyClass::new;这句话MyClass的有参构造器是MyFun的fun方法的实现。