Java的”::”是什么意思?
这是什么意思?
方法引用语法
対象構文クラスメソッドクラス名::メソッド名インスタンスメソッドオブジェクト変数::メソッド名コンストラクタークラス名::new
方法引用的基本
MethodRefUse.java的用法
package com.company;
public class MethodRefUse {
// 配列の要素の処理方法をメソッド参照で受け取れるように
public void walkArray(String[] data, Output output) {
for (var value : data) {
output.print(value);
}
}
// Output型に対応したメソッド(渡された文字列をブラケットでくくる)
static void addQuote(String value) {
System.out.printf("[%s]\n", value);
}
}
Output.java 有输出功能的Java文件。
// インターフェイスのファイル
package com.company;
// String型の引数を受け取り、戻り値はvoid型であるメソッド型
@FunctionalInterface
public interface Output {
void print(String str);
}
主要.java
package com.company;
public class Main {
public static void main(String[] args) {
var data = new String[] { "春はあけぼの", "夏は夜", "秋は夕暮れ" };
var u = new MethodRefUse();
u.walkArray(data, MethodRefUse::addQuote);
}
}
這是一個示例,將只處理陣列元素的程式碼從walkArray方法中剪切出來,並稍後傳遞。
可以替换方法。
请不要删除接口文件Output.java,否则会出现错误!下面是新增文件的目录结构:
.
├── SampleJava.iml
├── data.txt
├── out
│ └── production
│ └── SampleJava
│ └── com
│ └── company
│ ├── Counter.class
│ ├── Main.class
│ ├── MethodRefUse.class
│ └── Output.class
└── src
└── com
└── company
├── Counter.java
├── Main.java
├── MethodRefUse.java
└── Output.java
下面是使用walkArray方法计算数组中字符串数量的示例,Counter.java。
package com.company;
// 文字列をカウントするためのCounterクラス
public class Counter {
private int result = 0;
public int getResult() {
return this.result;
}
public void addLength(String value) {
this.result += value.length();
}
}
MethodRefUse.java 的方法引用使用。
package com.company;
public class MethodRefUse {
// 配列の要素の処理方法をメソッド参照で受け取れるように
public void walkArray(String[] data, Output output) {
for (var value : data) {
output.print(value);
}
}
// Output型に対応したメソッド(渡された文字列をブラケットでくくる)
static void addQuote(String value) {
System.out.printf("[%s]\n", value);
}
}
Output.java的中文翻译考虑以下一种选项:输出.java。
// インターフェイスのファイル
package com.company;
// String型の引数を受け取り、戻り値はvoid型であるメソッド型
@FunctionalInterface
public interface Output {
void print(String str);
}
主要的.java文件
package com.company;
public class Main {
public static void main(String[] args) {
var data = new String[] { "春はあけぼの", "夏は夜", "秋は夕暮れ" };
var u = new MethodRefUse();
var c = new Counter();
u.walkArray(data, c::addLength);
System.out.println(c.getResult());
}
}
执行结果
14
说明
Counter类的addLength方法将参数value的字符串加入到result字段中,所以walkArray方法作为整体,将求得包含在数组中的字符串长度的总和。
在这里,请注意原始的walkArray方法没有被改变。通过使用方法引用,只实现了框架和功能(在这里是逐个遍历数组的部分),详细的功能由方法的使用者决定—这样可以设计出更具通用性的方法。