3

このシグネチャを持つメソッドがたくさんあります:

public void sideEffects() {...}
public void foo() {...}
public void bar() {...}

(つまり、それらは void を返し、パラメーターを取りません) そして、次のようなことを行うことでリストにデータを入力できるようにしたいと考えています。

list.add(MyClass::sideEffects);
list.add(MyClass::foo);
list.add(MyClass::bar);

しかし、この署名をサポートする組み込み@FunctionalInterfaceのパッケージが見つかりません。java.util.functionこのために自分で作成する必要があります@FunctionalInterfaceか?

4

1 に答える 1

7

この場合、java.lang.Runnable探している署名があり、@FunctionalInterface. この目的でこれを使用できますが、これが良い習慣か悪い習慣かはわかりません。

コードは次のようになります。

package com.sandbox;

import java.util.ArrayList;
import java.util.List;

public class Sandbox {
    public static void main(String[] args) {
        List<Runnable> list = new ArrayList<>();
        list.add(Sandbox::sideEffects);
        list.add(Sandbox::foo);
        list.add(Sandbox::bar);

        for (Runnable runnable : list) {
            runnable.run();
        }
    }

    public static void sideEffects() {
        System.out.println("sideEffects");
    }

    public static void foo() {
        System.out.println("foo");
    }

    public static void bar() {
        System.out.println("bar");
    }

}
于 2014-04-14T18:55:00.650 に答える