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方法没有被改变。通过使用方法引用,只实现了框架和功能(在这里是逐个遍历数组的部分),详细的功能由方法的使用者决定—这样可以设计出更具通用性的方法。

广告
将在 10 秒后关闭
bannerAds