Java void as Runnable with parameter

时间:2018-06-27 10:31:24

标签: java lambda syntax runnable

我有这种方法:

public static void do(Runnable r1, String s1, Runnable r2){}

用法如下:

public class ClassA {
    public static void main(String[] args){
        do(null, "blabla", this::method); //works
        do(null, "blabla", this::method2(true)); //does not work
    }
    public void method(booolean) {}
    public void method2() {}
}

如何使它适用于带有参数的方法?

3 个答案:

答案 0 :(得分:4)

do(null, "blabla", () -> method(true));

如果您的第一行有效-很奇怪,因为method()需要一个参数,但是method2()-不需要

答案 1 :(得分:1)

由于 Runnable的方法确实采用了任何参数,因此 this :: method2(true)不起作用。

https://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html

如此处通过 MethodReference 一样,您将提供run()方法的实现。

答案 2 :(得分:0)

您的methodmethod2都是非静态的,所以想知道上述解决方案是如何工作的。首先,您无法像this方法那样在static上下文中访问main引用。因此,要访问这两个成员方法,您首先需要具有类ClassA的实例。然后我们需要解除对指针的引用以访问方法。

ClassA classA = new ClassA();
doMethod(null, "blabla", () -> classA.method(true));
doMethod(null, "blabla", () -> classA.method2());

如果您需要像这样访问它,

doMethod(null, "blabla", () -> method(true));

然后您需要像这样static成员声明这两个方法,

public static void method(boolean b) {

}