我有这种方法:
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() {}
}
如何使它适用于带有参数的方法?
答案 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)
您的method
和method2
都是非静态的,所以想知道上述解决方案是如何工作的。首先,您无法像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) {
}