方法引用
方法引用可以使用操作符“::”来应用已有方法的处理逻辑。简化代码和复用代码逻辑。
方法引用包括几种方式:
- 构造器引用: Class::new
- 静态方法引用: Class::staticMethod
- 实例方法引用: instance:method
- 类方法引用: Class::method, 当method的第一个参数类型是Class时才能使用
示例
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class MethodRefTest {
public MethodRefTest() {
}
public void hello(String name) {
System.out.println("hello: " + name);
}
public static int len(String str) {
return str == null ? 0 : str.length();
}
public static void main(String[] args) {
// 实例方法引用
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(System.out::println);
// 构造器引用
Supplier<MethodRefTest> supplier = MethodRefTest::new;
MethodRefTest mr = supplier.get();
// 静态方法引用
Function<String, Integer> fun = MethodRefTest::len;
int len = fun.apply("abc");
System.out.println(len);
// 实例方法引用
Consumer<String> hello = mr::hello;
hello.accept("fjx");
// 构造器引用, 类方法引用, 实例方法引用
Stream.generate(MethodRefTest::new).limit(5)
.map(MethodRefTest::hashCode)
.forEach(System.out::println);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Last Updated: 2024/04/23, 01:30:37