Java void как Runnable с параметром - PullRequest
0 голосов
/ 27 июня 2018

У меня есть этот метод:

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 голосов
/ 27 июня 2018

Поскольку Метод runnable run () принимает любой параметр, поэтому this :: method2 (true) не работает.

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

Как здесь, через MethodReference вы предоставляете реализацию метода run ().

0 голосов
/ 27 июня 2018

Ваши 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) {

}
0 голосов
/ 27 июня 2018
do(null, "blabla", () -> method(true));

Если ваша первая строка работает - это странно, потому что method() требует параметр, а method2() - не

...