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