双冒号的使用,之前写了一篇静态方法引用。今天这里再写一篇双冒号之对象方法的引用。
废话不多说,直接上代码,一切说明都在代码中:
准备步骤:
1、准备一个类,功能是是返回a-b之间的随机数
public class RandomNum {
//返回a到b之间的随机数
public int nextIntAtoB(int a,int b){
Random random = new Random();
return random.nextInt(b-a+1)+a;
}
}
2、准备一个函数式接口
@FunctionalInterface
public interface NumberHelper {
int nextAtoB(int a,int b);
}
3、上代码,开始展示优化
/**
* 方法引用:对象方法引用
* 对象方法引用概述:通过对象名来引用已存在的方法来简化Lamdba表达式,类似通过对象调用方法(非静态方法)
* 对象方法引用格式: 对象名::方法名
*/
public class Lamdba_New {
public static void main(String[] args) {
//实现效果:调用NumberHelper接口中的方法生成100-200之间的随机数
//方法1 使用匿名内部类来实现
NumberHelper num01 = new NumberHelper() {
@Override
public int nextAtoB(int a, int b) {
Random random = new Random();
return random.nextInt(b-a+1)+a;
}
};
System.out.println(num01.nextAtoB(100,200));
//方法2:使用lamdba表达式简化
NumberHelper num02 = (a,b)->{
Random random = new Random();
return random.nextInt(b-a+1)+a;
};
System.out.println(num02.nextAtoB(100,200));
//方法3:在lamdba表达式中调用已经存在的方法
//创建自定义的随机对象
RandomNum r = new RandomNum();
//此处即是通过对象调用已经存在的方法(至于怎么简化成一行的,参考我之前的博客文章)
NumberHelper num03 = (a,b)-> r.nextIntAtoB(a,b);
System.out.println(num03.nextAtoB(100,200));
//方法4:使用对象方法引用简化lamdba表达式
NumberHelper num04 = r::nextIntAtoB;
System.out.println(num04.nextAtoB(100,200));
}
}
以上的输出结果效果均同。O(∩_∩)O哈哈~
一起学习,一起秃头