带有参数可运行的Java [重复]

问题描述 投票:0回答:2

是的,已经有这样的问题了,但是我是一个Java新手,但似乎没有一个可以解决我的具体情况。

这是我当前的代码:

Something.java

public class Something {
    public Something() {

    }
    public void someMethod(Runnable runnable) {
        String e = "This string is currently unused";
        runnable.run();
    }
}

BasicallyAnythingElse.java

Something something = new Something();
something.someMethod(() -> {
    System.out.println("Test");
});

此代码目前仍在运行,但是我希望能够在BasicnAnythingElse.java中定义的Runnable中的Something.java中使用未使用的String,如下所示:

something.someMethod((e) -> {
    System.out.println(e);
});

然而,仅将runnable.run之后的e放在“()”中并不起作用。回答时,请记住我是Java新手,是的,我知道对于像我这样的人编写这样的复杂代码并不是很明智,但是我确实需要此代码。

java runnable
2个回答
3
投票

了解functional interfaces。您需要一个Consumer。像这样:

public class Something {
    public Something() {

    }
    public void someMethod(Consumer<String> consumer) {
        String e = "Test";
        consumer.accept(e);
    }
}

这样称呼:

Something something = new Something();
something.someMethod(System.out::println);

打印:

Test

编辑:如果您确实真的想要一个可运行对象,则可以使用参数捕获,如下所示:

public class Something {
    public Something() {

    }
    public void someMethod(Runnable runnable) {
        runnable.run();
    }
}

这样称呼:

String test = "test string";
Something something = new Something();
something.someMethod(() -> System.out.println(test));

打印:

test string

但是,在这一点上,它是如此冗余,您不妨只执行以下操作:

String test = "blah blah blah";
Runnable r = () -> {
    doWhateverYouWantToInputPartOne(test);
    doWhateverYouWantToInputPartTwo(test);
};
... whenever you want to run it later
r.run();

3
投票

“带有参数的可运行对象”基本上是Consumer。在这种情况下,您需要Consumer

Consumer<String>

然后您将能够做您想做的事。

© www.soinside.com 2019 - 2024. All rights reserved.