如何从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方面是等效的)