JAVA 8函数式编程(四):JAVA支持闭包吗?
来源:互联网 发布:阿里云cdn审核 编辑:程序博客网 时间:2024/05/17 02:51
如果闭包的定义如此简单,请参看百度百科对闭包的定义:
闭包包含自由(未绑定到特定对象)变量;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
简单来说,就是可以绑定变量作用域,那么很显然,JAVA是完全支持闭包的,如下:
static IntFunction<Integer> sumEx(int a) { // 定义局部变量 final int ex = a * 10; return new IntFunction<Integer>() { @Override public Integer apply(int value) { // 引用局部变量 return ex + value; } };}
上述代码可以进一步简化,如下:
static IntFunction<Integer> sumEx(int a) { // 定义局部变量 final int ex = a * 10; // 自动类型推导,这是JAVA 8最牛的精华 return (value) -> { // 引用局部变量 return ex + value; };}
测试代码如下:
// 获取闭包函数IntFunction<Integer> fun10 = sumEx(10);IntFunction<Integer> fun20 = sumEx(20);// 输出111System.out.println(fun10.apply(11));// 输出211System.out.println(fun20.apply(11));
结论
- JAVA支持变量作用域,完全支持闭包;
- 并不是只有函数式编程语言才支持闭包,见代码片段1,完全是面向对象的写法;
- 相比与Javascript等函数式编程语言,由于final的限定,JAVA并不支持对变量作用域值的修改;
- 由于JAVA严格的面向对象设计语言,对于函数的调用必须加上对象名限定(如类名、实例名及接口名称);
- 闭包没有那么神奇,也没有那么高不可攀;
阅读全文
0 0
- JAVA 8函数式编程(四):JAVA支持闭包吗?
- Java 8 Lambda函数编程入门(四)
- Java函数式编程(四)集合的使用
- Java 8 函数式编程
- java 8 函数式编程
- Java Socket编程系列(四)开发支持多客户端访问的Server
- Java Socket编程(四)
- Java Socket编程(四)
- Java GUI编程(四)
- Java socket编程(四)
- Java函数式编程
- Java函数式编程
- java函数式编程
- JAVA 8函数式编程(一):高阶函数
- java网络编程(四)
- [Java 8] (1) 函数式编程简介
- Java 8函数式编程学习笔记
- 《Java 8函数式编程》 读书记录
- 友盟崩溃日志分析
- JS nodeType返回类型
- 使用类和多文件编译
- C# .ToString() 格式化
- Linux命令大全
- JAVA 8函数式编程(四):JAVA支持闭包吗?
- 抽象类(abstract class | interface)
- HDU-2017 多校训练赛10-1002-Array Challenge
- CCF 俄罗斯方块(Java)
- 欢迎使用CSDN-markdown编辑器
- MSComm控件的使用方法
- git上传项目error: failed to push some refs to 'https://git.oschina.net/xxxxxx/aaaaaa.git'
- UVA 1025 A Spy in the Metro
- linux-TCP简单客户端代码