一.方法的引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。
注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"
::
"
二.四种方法引用类型
方法引用的标准形式是:类名::方法名。(方法名不含括号)
类型 | 示例 |
---|---|
引用静态方法 | ContainingClass::staticMethodName |
引用某个对象的实例方法 | containingObject::instanceMethodName |
引用某个类型的任意对象的实例方法 | ContainingType::methodName |
引用构造方法 | ClassName::new |
import java.util.Date;public class User { private Date createDate; public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public static int compareByAge(User a, User b){ return a.createDate.compareTo(b.createDate); } }
静态方法引用
public void test() { User[] users = new User[5]; //使用lambda表达式 Arrays.sort(users, (o1, o2) -> o1.getCreateDate().compareTo(o2.getCreateDate())); //等价于 Arrays.sort(users, (o1, o2) -> User.compareByAge(o1, o2)); //方法引用 Arrays.sort(users, User::compareByAge); }
引用对象的实例方法
public void test() { User [] users = new User[5]; class ComparisonProvider{ public int compareByAge(User a,User b){ return a.getCreateDate().compareTo(b.getCreateDate()); } } ComparisonProvider provider = new ComparisonProvider(); //lambda表达式 Arrays.sort(users,(a,b)->provider.compareByAge(a,b)); //使用方法引用 Arrays.sort(users, provider::compareByAge); }
引用类型对象的实例方法
public void test() { String[] array = {"Hello","lamdba"}; //lambda表达式 Arrays.sort(array,(s1,s2)->s1.compareToIgnoreCase(s2)); //使用方法引用 Arrays.sort(array, String::compareToIgnoreCase); }
引用构造方法
@FunctionalInterfaceinterface MyFuntion { User function(Date n); }public class Main { public void test() { //lambda表达式 MyFuntion myFuntion = (data)-> new User(data); //使用方法引用 MyFuntion myFuntion = User::new; } }
作者:Mr_欢先生
链接:https://www.jianshu.com/p/ec4659ed2c1f
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦