首页 生活指南 正文内容

10个Java表达式、默认方法和函数式接口的重点知识

阿立指南 生活指南 2022-09-15 07:09:12 340 0

10 个 Java 表达式,流式 API 示例

到目前为止,我们已经看到了 Java 8 的 10 个表达式,这对于初学者来说是相当大的工作量,您可能需要自己运行示例程序来掌握它。尝试修改要求以创建您自己的示例以便快速学习。我还想建议您使用 IDE 来练习表达式,它对 Java 8 有很好的支持。当代码转换为函数式时,它会及时提示你。只需按照提示将匿名类转换为表达式很容易。此外,如果您喜欢阅读,请记得查看作者的《Java 8, (Java 8, )》一书java lambda 方法引用,或者也可以查看 Java 8 in (Java 8 in ),虽然这本书不是尚未出版,但我想网上有第一章的免费pdf。不过,在您忙于其他任何事情之前,让我们回顾一下 Java 8 表达式、默认方法和函数式接口的关键点。

1)表达式只能放在以下代码中:用@注解的预定义函数接口、带有抽象函数的方法或SAM(单一抽象方法)类型。这些被称为表达式的目标类型,可以用作返回类型或目标代码的参数。例如,如果一个方法接收,或者一个接口有一个抽象方法,则可以传入一个表达式。类似地,如果一个方法接受在 java.util 中声明的接口。包java lambda 方法引用,如 , , 或 ,则表达式可以传递给它。

2)只有当方法不修改表达式提供的参数时,才能在表达式中使用方法引用。本例中的表达式可以替换为方法引用,因为这只是一个具有相同参数的简单方法调用。

list.(n -> .out.(n));

list.(.out::); // 使用方法引用

但是,如果对参数有任何修改,则不能使用方法引用,而是键入完整的表达式,如下所示:

list.((s) -> .out.("*" + s + "*"));

其实参数的类型声明这里可以省略,编译器可以从列表的class属性推断出来。

java lambda 方法引用_java lambda 方法引用_java值引用和对象引用

3) 内部可以使用静态、非静态和局部变量,内部称为变量捕获。

4)表达式在 Java 中也称为闭包或匿名函数,所以如果同事称它为闭包,请不要感到惊讶。

5)方法在编译器内部被翻译成私有方法,并调度字节码指令来调用它们。可以使用 JDK 中的 javap 工具对类文件进行反编译。使用 javap -p 或 javap -c -v 命令查看表达式生成的字节码。大致应该是这样的:

java.lang.$0(java.lang.);

6)表达式有一个限制,即只能引用final或final的局部变量,也就是说在作用域外定义的变量不能在内部进行修改。

列表 = .(new []{2, 3,5,7});

int = 2;

.( -> { ++; });

时间错误:“来自 a 的本地必须是最终的或最终的”

或者,可以直接访问它而不进行修改,如下所示:

列表 = .(new []{2, 3,5,7});

int = 2;

java lambda 方法引用_java lambda 方法引用_java值引用和对象引用

.( -> { .out.(*); });

所以它看起来更像是一个不可变的闭包,类似于。

这些都是 Java 8 表达式的 10 个示例。这次修订将是 Java 历史上最大的一次,将对 Java 开发人员未来使用集合框架的方式产生深远的影响。我认为最类似规模的变化之一是 Java 5 的发布,它带来了许多优势并提高了代码质量,例如:泛型、枚举、()、静态导入、并发 API 和可变参数。上述特性使 Java 代码更加简洁,我认为表达式会进一步改进它。我期待开发可以使高性能应用程序更易于编写的并行第三方库。

原文链接:翻译:-

翻译链接:

欢迎 发表评论:

文章目录
    搜索