如何从Java8 lambda创建Runnable

时间:2015-12-01 17:54:49

标签: java lambda java-8

我遇到了一些代码,尽管有点阅读,但我仍然难以理解。调用一个方法,该方法接收两个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,还请有人解释语法() - > {}。具体来说,()括号是什么意思?

感谢。

1 个答案:

答案 0 :(得分:36)

Lambda可以在任何需要功能接口的地方使用。 功能接口是具有单个抽象方法的任何接口。

本例中使用的lambda语法是(arguments) -> {blockOfCodeOrExpression}。在单个参数的情况下,可以省略括号,并且在单个命令或表达式的情况下可以省略括号。

换句话说,() -> System.out.println("hello world");等同于

 new Runnable(){      
   @Override
   public void run(){
     System.out.println("Hello world one!");
   }
 };

(我很确定它不是字节码等价的,但在功能方面是等效的)