方法引用
在Java中,方法引用是一种简洁的语法形式,用于直接引用现有方法作为Lambda表达式的实现。 方法引用可以替代Lambda表达式,使代码更加简洁清晰。
语法
java
// Class实例
ClassName::methodName
// 对象实例
objectName::methodName
1
2
3
4
2
3
4
示例
java
public class MethodReferenceTest {
public static void main(String[] args) {
// 构造方法引用
Supplier<MethodReferenceTest> constructor = MethodReferenceTest::new;
MethodReferenceTest instance = constructor.get();
// this/super方法引用
System.out.println(instance.toStringSupplier().get());
instance.runnable().run();
// 实例方法引用
Runnable run = instance::run;
run.run();
Predicate<Integer> isOdd = instance::isOdd;
println(isOdd.test(3));
// 静态方法引用
Runnable hello = MethodReferenceTest::hello;
hello.run();
Consumer<Object> print = MethodReferenceTest::println;
print.accept("World!");
// Class实例方法引用
// 类型强制转换方法引用
Function<Object, String> cast = String.class::cast;
Object s = "a", i = 1;
cast.apply(s);
// Class Cast Exception
cast.apply(i);
}
Supplier<String> toStringSupplier() {
// super方法引用
return super::toString;
}
Runnable runnable() {
// this方法引用
return this::run;
}
void run() {
println("Running...");
}
boolean isOdd(int num) {
return (num & 1) == 1;
}
static void println(Object o) {
System.out.println(o);
}
static void hello() {
println("Hello");
}
}
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
47
48
49
50
51
52
53
54
55
56
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
47
48
49
50
51
52
53
54
55
56