如何从Java8 lambda 创建Runnable
我遇到了一些代码,尽管有点阅读,但我还是很难理解。 调用一个方法,该方法接收两个args,其中一个是Runnable。 而不是传入一个Runnable对象虽然有一个lambda。
例如:
公共类LambdaTest {private final Lock lock = new ReentrantLock(); @Test public void createRunnableFromLambda(){Locker.runLocked(lock,() - > {System.out.println(“hello world”);}); public static class Locker {public static void runLocked(Lock lock,Runnable block){lock.lock(); 尝试{block.run(); } finally {lock.unlock(); }}}}
所以我的问题是,你能解释一下如何从lambda创建Runnable,还有人可以解释语法() – > {}。 具体来说,()括号是什么意思?
谢谢。
Lambda可用于需要function接口的任何地方。 function接口是具有单个抽象方法的任何接口。
在这种情况下使用的lambda语法是(arguments) -> {blockOfCodeOrExpression}
。 在单个参数的情况下可以省略括号,并且在单个命令或表达式的情况下可以省略括号。
换句话说, () -> System.out.println("hello world");
相当于*
new Runnable(){ @Override public void run(){ System.out.println("Hello world one!"); } };
(我很确定它不是字节码等价的,但在function方面是等效的)