从Groovy到Java 8

Groovy开发人员早已熟知Java 8中新引入的概念和新的语言结构了。在Java新版本即将推出的增强特性中,有很多是Groovy在几年前就已经提供了的。从用于函数式编程风格的新语法,到lambdas表达式、collection streaming和要把方法引用作为一等公民,Groovy开发人员在未来编写Java代码时具有先天性优势。本文将重点关注Groovy和Java 8的共同点,并阐述了Java 8如何解读Groovy中那些熟悉的概念。

\

我们先来讨论一下函数式编程风格,目前在Groovy中如何使用函数式编程,Java 8的概念如何提供更好的函数式编程风格。

\

闭包(Closures)也许是Groovy中最好的函数式编程实例了。从内部结构来看,Groovy中的closure只是一个函数式接口实现。函数式接口是指任意只需要实现一个方法的接口。默认情况下,Groovy的closure实现了一个名为“Callable”的函数式接口,实现了这个接口的“call”方法。

\
\def closure = {\       \"called\"\} \assert closure instanceofjava.util.concurrent.Callable\assert closure() == \"called\"\
\

通过转换closure的类型,我们可以让Groovy实现其他函数式接口。

\
\public interface Function {\def apply();\}  \\def closure = {\        \"applied\"\} as Function \\assert closure instanceof Function\assert closure.apply() == \"applied\"\
\

在Java 8中很好地引入了闭包和函数式编程的思想。在Java即将发布的版本中函数式接口极为重要,因为在Java 8中针对新引入的Lambda函数式接口提供了隐含的实现。

\

我们可以把Lambda函数当成Groovy中的闭包那样去理解和使用。在Java 8中实现callable接口像Groovy中的闭包一样简单。

\
\Callable callable = () -\u0026gt; \"called\";\assert callable.call() == \"called\";\
\

你需要特别注意是,Java 8为单行的lambda函数提供了隐含的返回语句,后来Groovy也借鉴了这个概念。将来,Groovy也会为单个抽象方法提供隐含实现(类似于Java 8提供的那些实现)。这个特性使你不必完全派生出closures的具体子类对象就可以使用实例的属性和方法。

\
\abstract class WebFlowScope {\       private static final Map scopeMap = [:] \\abstractdefgetAttribute(def name); \\publicdef put(key, val) {\scopeMap[key] = val\getAttribute(key)\       }  \\protected Map getScope() {\scopeMap\       }\}  \\WebFlowScope closure = { name -\u0026gt;\       \"edited_${scope[name]}\"\} \\assert closure instanceofWebFlowScope\assert closure.put(\"attribute\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值