如何从Java8 lambda创建Runnable


问题内容

尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是Runnable。尽管有一个lambda,但没有传递Runnable对象。

例如:

公共课程LambdaTest {

    私人最终锁锁=新的ReentrantLock();

    @测试
    公共无效createRunnableFromLambda(){
        Locker.runLocked(lock,()-> {
            System.out.println(“ hello world”);
        });
    }

    公共静态类储物柜{
        公共静态无效runLocked(锁定锁,可运行块){
            lock.lock();
            尝试{
                block.run();
            }最后{
                lock.unlock();
            }
        }
    }
}

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

谢谢。


问题答案:

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

在这种情况下使用的lambda语法为(arguments) -> {blockOfCodeOrExpression}。在使用单个参数的情况下,可以省略括号,在使用单个命令或表达式的情况下,可以省略花括号。

换句话说,() -> System.out.println("hello world");就相当于*在这儿,一个Runnable有望

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

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