首页 > 代码库 > java 8 closure 闭包
java 8 closure 闭包
在functional programming 里面经常提及closure 闭包。 那么究竟闭包是一个什么东东? 让人如何难以理解呢?
1 闭包定义
closure is an instance of a function that can reference nonlocal variables of that
function with no restrictions。这是闭包的英文定义。说实在这段定义确实很抽象让人难以理解。
然后我这里其实有两个点把这段定义具体化:
1.1。 闭包就是允许作为参数被传递到另外一个函数。
1.2。 闭包允许访问(access)修改(modify)闭包的外部变量。
2根据上面两点,这里通过代码来说明什么是闭包。
PS: 这里我不希望详细解释闭包的更深层内容,但是通过列举代码来说明java8 部分支持闭包。( java 8 不支持修改外部变量)
List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); //closure could be assigned to another method //这里说明闭包可以作为一个变量 Predicate<String> predicate = (s) -> "a".equals(s); list.stream().filter(predicate); //closure could be access outer var //闭包里面可以访问外部变量 final String outerStr = "Outer"; list.forEach(s -> System.out.println(outerStr+s)); //由于java的匿名内部类只允许变量为final,所以这里不支持在闭包里面修改 //变量outerStr2 //in java closure can‘t modify outer variable can‘t not compile /*String outerStr2 = "Outer"; list.forEach(s -> outerStr2 = "modifyOuter");*/
本文出自 “Development” 博客,请务必保留此出处http://jamesdev.blog.51cto.com/2066624/1858769
java 8 closure 闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。