如何从 Java8 lambda 创建 Runnable

2022-09-02 00:44:30

我遇到了一些代码,尽管我读了一点,我还是很难理解。有一个调用方法,该方法接受两个参数,其中一个是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();
            }
        }
    }
}

所以我的问题是,你能解释一下Runnable是如何从lambda创建的吗,也可以请有人解释一下语法()->{}。具体来说,()括号是什么意思?

谢谢。


答案 1

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

本例中使用的 lambda 语法为 。对于单个参数,可以省略括号,对于单个命令或表达式,可以省略大括号。(arguments) -> {blockOfCodeOrExpression}

换言之,此处等效 *,其中 a 预期() -> System.out.println("hello world");Runnable

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

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


答案 2

推荐