docs: update docs/java.md. (#628)

This commit is contained in:
YuRuiH 2024-04-26 11:15:25 +08:00 committed by GitHub
parent 7fa1528be5
commit c0b8eb4da7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1470,6 +1470,71 @@ int frequency = Collections
.frequency(list, 2); // frequency = 2 .frequency(list, 2); // frequency = 2
``` ```
### 方法引用
<!--rehype:wrap-class=col-span-2-->
有一种函数式接口叫做`Consumer`,里面有个抽象方法`accept`能够接受一个参数但是没有返回值,加入我想实现这个方法,让他打印我传入的参数,那么我可以这样:
```java
Consumer<String> test = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
test.accept("test");
```
更简单的我们可以直接传入Lambda表达式
```java
Consumer<String> test = System.out::println;
```
这就是方法引用,方法引用通过方法的名字来指向一个方法,让语言的构造更紧凑简洁,减少冗余代码。
#### 使用方式
- 引用方法
- 引用构造方法
- 引用数组
#### 引用方式
- 实例对象::实例方法名
```java
Consumer<String> myConsumer = System.out::println;
myConsumer.accept("test");
```
- 类名::静态方法名
```java
Function<Long, Long> myFunction = Math::abs(x);
Long result = myFunction.apply("-2L");
```
- 类名::实例方法名
```java
BiPredicate<String, String> myBiPredicate = String::equals;
System.out.println(myBiPredicate.test("test", "test"));
```
- 引用构造器
```java
Function<Integer, String> myFunction = StringBuffer::new;
StringBuffer sb = myFunction.apply(10);
```
- 引用数组
```java
Function<Integer, int[]> myFunction = int[]::new;
int []arr = myFunction.apply(123);
```
另见 另见
--- ---