当前位置: 首页 > 面试题库 >

如何从Java8 lambda创建Runnable

邹学民
2023-03-14
问题内容

尽管有一些阅读,但我遇到了一些我仍难以理解的代码。调用了一个方法,该方法需要两个参数,其中一个是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!");
   }
 };

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



 类似资料:
  • 问题内容: 目前,每当我需要从数组创建流时,我都会 有一些直接的方法可以从数组创建流吗? 问题答案: 您可以使用Arrays.stream Eg 您也可以使用@fge所提到的,它看起来像 但是note 将返回,而如果您传递一个type数组,则将返回。因此,简而言之,您可以观察两种方法之间的区别,例如 将原始数组传递给时,将调用以下代码 当您将原始数组传递给以下代码时,将被调用 因此,您得到不同的结

  • `公共类LoginSuccess扩展AppCompatActivity{Toolbar Toolbar;TabLayout TabLayout;ViewPager ViewPager;ViewPagerAdapter ViewPagerAdapter; }`

  • 目前,每当我需要从数组创建流时,我都会

  • 我正在使用Spring maven插件,我想从特定文件夹中的指定xml模式创建POJO类。我尝试通过java代码使用< code>xjc命令,但是它不能生成这些类。其次,我尝试使用< code>jaxb,但是在marshell/unmarshalling时,它处理的是< code>xml文件,而不是< code>xsd模式。我认为这不是从< code>xsd创建POJO的方法。 在java中从xs

  • 问题内容: 我正在尝试将String传递给我的。如何通过针对读者的“测试” 而不是来自读者的输入? 问题答案: 您可以如下修改代码