3

我有一堆带有这个签名的方法:

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

(也就是说,它们返回 void 并且不带参数)而且我希望能够通过执行以下操作来填充 List:

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

但是,我无法@FunctionalInterfacejava.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 回答