Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java 8 Lambda 表达式和函数式接口最佳实践 #92

Open
JasonWu73 opened this issue Apr 21, 2020 · 0 comments
Open

Java 8 Lambda 表达式和函数式接口最佳实践 #92

JasonWu73 opened this issue Apr 21, 2020 · 0 comments
Labels
知识点 单知识点
Projects

Comments

@JasonWu73
Copy link
Owner

Java 8 在 java.util.function 包中,定义了大量现成可用的函数式接口,使得我们在使用 lambda 表达式时,可以避免大部分的函数式接口编码工作。

函数式接口

函数式接口:只有一个抽象方法的接口。

最佳实践:

  • 使用 @FunctionalInterface 注解。使用该注解后,编译器就会在编译时检查这个接口是否符合函数式接口规范
  • 避免使用函数式接口进行方法重载。比如使用 Callable<V>(计算并得到一个结果;如果无法计算则抛出异常)和 Supplier<T>(获取一个结果)作为参数进行方法重载时,明显会出错

Lambda 表达式 vs 内部类

虽然我们在使用 Lambda 表达式时,其本质就是将内部类替换为 Lambda 表达式。但 Lambda 表达式并不等于内部类:

  • 内部类:拥有自己的 this 指向,this 指向内部类对象
  • Lambda 表达式:没有自己的 this 指向,this 指向封闭范围

这类似于 ES6 的箭头函数与普通函数的区别。

Lambda 表达式最佳实战

1、避免指定参数类型。

2、避免使用小括号将单个参数括起来。

3、在需要返回结果的单行 Lambda 表达式体中,避免使用 return 关键字和大括号。

4、若 Lambda 表达式只是简单地调用在其他地方已经实现了的方法时,可直接使用方法引用

@JasonWu73 JasonWu73 added 教程 基础入门 知识点 单知识点 and removed 教程 基础入门 labels Apr 21, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
知识点 单知识点
Projects
Java
Awaiting triage
Development

No branches or pull requests

1 participant