Java 8 方法引用多个不同的构造函数

Java 8 Method Reference more than one different constructors

我正在尝试编写一种方法,该方法采用 Runnable class 的构造函数并根据输入的构造函数以某种方式运行它。

所以我希望能够做这样的事情:

executeInParallel(someRunnable::new)
executeInParallel(someOtherRunnable::new)

我的问题是如何定义 executeInParallel 方法以便能够传递我在参数中定义的任何 Runnable 构造函数?基本上我的问题是为了做到这一点我该如何定义这个方法? void executeInParallel(??){ ... }

我似乎只能将遵循函数式接口的方法作为参数,因此我无法使用接受多个 xRunnable::new 构造函数的单个参数来定义 executeInParallel 是有没有一种方法可以让我在不使用某种工厂模式的情况下做到这一点?

我想说明一下,我这样做的原因是我想传入构造函数而不是实例。我无法在 executeInParallel 之外生成实例,它必须在该方法内部生成。我还想传入 different 构造函数,它们采用 different 参数

提前致谢

编辑 抱歉,我希望问题更清楚一些。

您的 executeInParallel() 方法接受将生成 Runnable 的内容,因此其签名应为 executeInParallel(Supplier<? extends Runnable> runnableFactory)

然后,您可以使用任何可以 return 实现 Runnable.

的任何 class 实例的 lambda 或方法引用来调用它

可能的用法:

// Ex 1 :
class MyJob implements Runnable { 
    public void run() {...} 
}
executeInParallel(() -> new MyJob());
executeInParallel(MyJob::new);

// Ex 2 :
class MyJobWithParams implements Runnable {
    public MyJobWithParams(String param1, int param2) { ... }
    public void run() {...} 
}
executeInParallel( () -> new MyJobWithParams("Hello",42) );
// You cannot use method references here

// Ex 3 : 
class RunnableFactory {
    public static Runnable makeRunnable() {
        return new MyJob(); // which is a Runnable, see above
    }
}
executeInParallel( () -> RunnableFactory.makeRunnable() );
executeInParallel( RunnableFactory::makeRunnable );

此外,您声明只希望将 Runnable 构造函数传递给该方法。这可以通过方法引用(但仅适用于无参数构造函数)或通过 lambda 表达式(如上面的示例 #1 和 #2)来完成。