6.8.3 方法引用与构造器引用
如果Lambda
表达式的代码块只有一条代码,程序就可以省略Lambda
表达式中代码块的花括号。
如果L ambda
表达式的代码块只有一条代码,还可以在代码块中使用方法引用
和构造器引用
。
方法引用
和构造器引用
可以让Lambda
表达式的代码块更加简洁。方法引用和构造器引用都需要使用两个英文冒号
。
Lambda
表达式的几种引用方式
种类 |
示例 |
说明 |
对应的Lambda 表达式 |
引用类方法 |
类名::类方法 |
调用该类的类方法,并把函数式接口中被实现的抽象方法的全部参数传给该类方法 作为参数 |
(a,b,...)->类名.类方法(a,b,…) |
引用特定对象的实例方法 |
特定对象::实例方法 |
调用该对象的方法,并把函数式接口中被实现的抽象方法的全部参数传给该实例方法 作为参数 |
(ab,…)->特定对象.实例方法(a,b,…) |
引用某类对象的实例方法 |
类名::实例方法 |
函数式接口中被实现的抽象方法的第一个参数作为调用者 ,剩下的参数全部传给该实例方法 作为参数 |
(ab,…)->a.实例方法(b,…) |
引用构造器 |
类名::new |
函数式接口中被实现的抽象方法的全部参数传给该构造器作为参数 |
(a,b,...)->new 类名(a,b,…) |
|
|
|
|
## 1. 引用类方法 ## |
|
|
|
1 2 3 4 5 6 7 8 9 10
| Converter converter1 = from -> Integer.valueOf(from); Integer value1 = converter1.convert("99"); System.out.println(value1);
Converter converter2 = Integer::valueOf; Integer value2 = converter2.convert("99"); System.out.println(value2);
|
|
|
|
|
2. 引用特定对象的实例方法
1 2 3 4 5 6 7 8 9 10 11
| String testStr = "HelloWorld"; String subStr = "World";
Converter converter1 = from -> testStr.indexOf(from); Integer value1 = converter1.convert(subStr); System.out.println(value1);
Converter converter2 = testStr::indexOf; Integer value2 = converter2.convert(subStr); System.out.println(value2);
|
3. 引用某类对象的实例方法
1 2 3 4 5 6 7 8 9 10 11 12
| String testStr = "HelloWorld";
MyTest mt1 = (a, b, c) -> a.substring(b, c); String str1 = mt1.test(testStr, 5, testStr.length()); System.out.println(str1);
MyTest mt2 = String::substring; String str2 = mt2.test(testStr, 5, testStr.length()); System.out.println(str2);
|
4. 引用构造器
1 2 3 4 5 6 7
| YourTest yt1 = (String a) -> new JFrame(a); JFrame jf1 = yt1.win("我的窗口"); System.out.println(jf1);
YourTest yt2 = JFrame::new; JFrame jf2 = yt2.win("我的窗口"); System.out.println(jf2);
|
原文链接: 6.8.3 方法引用与构造器引用