首页 > 学院 > 开发设计 > 正文

方法引用

2019-11-08 02:19:47
字体:
来源:转载
供稿:网友

方法引用

方法引用就是直接访问类中的实例或者构造器或者方法,他提供了一种调用方法而不直接执行的方式,方法引用是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方法的实现。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表