1.枚举enum

enum CoffeeSize{
SHORT,
SMALL,
MEDIUM,
LARGE,
MUG
} def orderCoffee(size){
print "Coffee order received for size $size:"
switch(size){
case [CoffeeSize.SHORT, CoffeeSize.SMALL]:
println 'Conscious'
break;
case CoffeeSize.MEDIUM..CoffeeSize.LARGE:
println 'Programmer'
break;
case CoffeeSize.MUG:
println 'Caffeine IV'
break;
}
} orderCoffee(CoffeeSize.SMALL)
orderCoffee(CoffeeSize.LARGE)
orderCoffee(CoffeeSize.MUG) for(size in CoffeeSize.values()){
println size
} /*output
Coffee order received for size SMALL:Conscious
Coffee order received for size LARGE:Programmer
Coffee order received for size MUG:Caffeine IV
SHORT
SMALL
MEDIUM
LARGE
MUG
*/

2.for-each循环

def list = [1,3,6,4,9]

println '传统for循环'
for(int i = 0; i < list.size(); i++){
println i
} println '实现了 Iterable接口的for循环'
for(int i : list){
println i
} println '不指定类型的for循环'
for(i in list){
println i
}
/*output
传统for循环
0
1
2
3
4
实现了 Iterable接口的for循环
1
3
6
4
9
不指定类型的for循环
1
3
6
4
9 */

3.变长参数

def receiveVarArgs(int a, int...b){
println "$a and $b"
} def receiveArray(int a, int[] b){
println "$a and $b"
} receiveVarArgs(1,2,3,4,5) receiveArray(1,2,3,4,5) /*output
1 and [2, 3, 4, 5]
1 and [2, 3, 4, 5]
*/

4.注解-@Delegate

class Worker{
def Work(){println 'Work'}
def Analyze(){println 'Analyze'}
def WriteReport(){println 'WriteReport'}
} class Expert{
def Analyze(){println 'Expert Analyze'}
} class Manager{
@Delegate Expert expert = new Expert()
@Delegate Worker worker = new Worker()
} def ironcrow = new Manager()
ironcrow.Work()
ironcrow.Analyze()
ironcrow.WriteReport() /*output
Work
Expert Analyze
WriteReport */

5-注解@Lazy:惰性创建

// 非惰性创建
class Heavy {
def size = 10
Heavy(){
println("Create Heavy with $size")
}
} class AsNeeded {
def value
Heavy heavy1 = new Heavy()
Heavy heavy2 = new Heavy(size: value) AsNeeded(){
println 'Created AsNeeded'
}
} class Program {
static void main(String[] args){
def asNeeded = new AsNeeded(value: 1000)
println asNeeded.heavy1.size
println asNeeded.heavy1.size
println asNeeded.heavy2.size
println asNeeded.heavy2.size
}
} /*output Create Heavy with 10
Create Heavy with 10
Created AsNeeded
10
10
null
null
*/
// 惰性创建
class AsNeeded {
def value
@Lazy Heavy heavy1 = new Heavy()
@Lazy Heavy heavy2 = new Heavy(size: value) AsNeeded(){
println 'Created AsNeeded'
}
} /*output
Created AsNeeded
Create Heavy with 10
10
10
Create Heavy with 10
1000
1000
*/

6.@Singleton单例

@Singleton(lazy = true)
class TheUnique{
def sayHello(){
println 'hello'
}
} TheUnique.instance.sayHello() /*output
hello
*/

Groovy学习笔记-Java 5新特性支持的更多相关文章

  1. C++ 学习笔记(一些新特性总结3)

    C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // ...

  2. CSS学习笔记之CSS3新特性

    目录 1.边框 2.背景 3.文本 4.字体 5.转换 6.过渡 7.动画 8.多列 9.自定义尺寸 CSS 用于控制网页的样式和布局,而 CSS3 是最新的 CSS 标准,这篇文章将着重介绍 CSS ...

  3. HTML学习笔记之HTML5新特性

    目录 1.拖放 2.画布 3.可伸缩矢量图形 4.地理定位 5.Web 存储 6.应用缓存 7.Web Worker 1.拖放 拖放是一种常见的特性,用于抓取对象以后拖到另一个位置,它是 HTML5 ...

  4. Spring 4支持的Java 8新特性一览

    有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...

  5. Java学习:JDK8的新特性

    Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...

  6. Java 8 新特性终极版

    声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...

  7. Java 8新特性前瞻

    快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...

  8. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  9. 【整理】Java 8新特性总结

    闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...

随机推荐

  1. spring 事务关键类

    TransactionInterceptor-> TransactionAspectSupport spring 事务的提交 AbstractPlatformTransactionManager

  2. Linux之nginx入门

    nginx入门 详见可参考:https://www.cnblogs.com/tiger666/p/10239307.html?tdsourcetag=s_pctim_aiomsg 1. 常用的WEB框 ...

  3. application.xml中配置文件properties导入

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.Prop ...

  4. MATLAB常用函数(不定时更新)

    1.pause 一般情况下pause(a)表示程序暂停a秒后继续执行,但有时候也存在这种情况,程序中只有pause:并没有参数a,这样的意思是程序暂停,按任意键程序继续执行.2.uiwait(h,ti ...

  5. ajax post json格式返回

    Ajax.aspx: Response.ContentType = "application/json"; Response.Write("{result: '" ...

  6. mac常用操作

    Command+Shift+. 可以显示隐藏文件.文件夹 touch a.txt 新建txt文件

  7. Loadrunner与idea编写加密的java Vusers脚本总结

    Loadrunner与idea编写加密的java Vusers脚本总结 准备工作:   jdk版本的选择:       Loadrunner11 使用版本jdk1.6 32位(如果使用1.7的Load ...

  8. windows服务器安全管理工具——IISCrypto

    官方网站地址:https://www.nartac.com/Products/IISCrypto/ 下载地址:https://www.nartac.com/Products/IISCrypto/Dow ...

  9. Python3 Tcp未发送/接收完数据即被RST处理办法

    一.背景说明 昨天一个同事让帮忙写个服务,用于接收并返回他那边提交过来的数据,以便其查看提交的数据及格式是否正确. 开始想用django写个接口,但写接口接口名称就得是定死的,他那边只能向这接口提交数 ...

  10. Webpack学习-工作原理(下)

    继上篇文章介绍了Webpack的基本概念,完整流程,以及打包过程中广播的一些事件的作用,这篇文章主要讲生成的chunk文件如何输出成具体的文件.分同步和异步两种情况来分析输出的文件使用的webpack ...