Java 8函数式编程2.2 如何辨别Lambda表达式_Java 8函数式编程2.2 如何辨别Lambda表达式试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Java 8函数式编程 > 2.2 如何辨别Lambda表达式

Java 8函数式编程——2.2 如何辨别Lambda表达式

Lambda 表达式除了基本的形式之外,还有几种变体,如例2-3 所示。 例2-3 编写Lambda 表达式的不同形式 Runnable noArguments = () -> System.out.println("Hello World");  ActionListener oneArgument = event -> System.out.println("button clicked");  Runnable multiStatement = () -> {  System.out.print("Hello"); System.out.println(" World"); }; BinaryOperator<Long> add = (x, y) -> x + y;  BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y;  ➊中所示的Lambda 表达式不包含参数,使用空括号() 表示没有参数。该Lambda 表达式实现了Runnable 接口,该接口也只有一个run 方法,没有参数,且返回类型为void。 ➋中所示的Lambda 表达式包含且只包含一个参数,可省略参数的括号,这和例2-2 中的形式一样。 Lambda 表达式的主体不仅可以是一个表达式,而且也可以是一段代码块,使用大括号({})将代码块括起来,如➌所示。该代码块和普通方法遵循的规则别无二致,可以用返回或抛出异常来退出。只有一行代码的Lambda 表达式也可使用大括号,用以明确Lambda表达式从何处开始、到哪里结束。 Lambda 表达式也可以表示包含多个参数的方法,如➍所示。这时就有必要思考怎样去阅读该Lambda 表达式。这行代码并不是将两个数字相加,而是创建了一个函数,用来计算两个数字相加的结果。变量add 的类型是BinaryOperator<Long>,它不是两个数字的和,而是将两个数字相加的那行代码。 到目前为止,所有Lambda 表达式中的参数类型都是由编译器推断得出的。这当然不错,但有时最好也可以显式声明参数类型,此时就需要使用小括号将参数括起来,多个参数的情况也是如此。如➎所示。 目标类型是指Lambda 表达式所在上下文环境的类型。比如,将Lambda 表达式赋值给一个局部变量,或传递给一个方法作为参数,局部变量或方法参数的类型就是Lambda 表达式的目标类型。 上述例子还隐含了另外一层意思:Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。目标类型也不是一个全新的概念。如例2-4 所示,Java 中初始化数组时,数组的类型就是根据上下文推断出来的。另一个常见的例子是null,只有将null 赋值给一个变量,才能知道它的类型。 例2-4 等号右边的代码并没有声明类型,系统根据上下文推断出类型信息 final String[] array = { "hello", "world" };

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《Java 8函数式编程》其他试读目录

• 2.1 第一个Lambda表达式
• 2.2 如何辨别Lambda表达式 [当前]
• 2.3 引用值,而不是变量
• 2.4 函数接口
• 2.5 类型推断
• 2.6 要点回顾
• 2.7 练习
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •