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. java第一次,第二次实训

    本次作业通过自己的练习和理解还是可以写出来的,最后两个题目我暂时没有写 编写程序: 声明一个整型变量a,并赋初值5,在程序中判断a是奇数还是偶数,然后输出判断的结果. 编写程序:从键盘输入圆的半径,计 ...

  2. nigix反向代理

    参考: https://www.cnblogs.com/yycc/p/8185748.html

  3. 服务器与客户端连接 & 聊天机器人

    服务器运行当显示 E:\pycharm\python\venv\Scripts\python.exe E:/pycharm/python/协议/机器人聊天服务器.py 开始监听 accept 说明服务 ...

  4. C语言实现过滤ASCII在0~127范围内的字符,并去除重复的字符

    #include <stdio.h> #include <string.h> /* 1.以字符串作为参数 2.找出ASCII在1~127范围内的字符 3.去掉重复字符 */ i ...

  5. JS设置、获取和取消Cookie

    // 设置cookie   function setCookie(name, value, seconds, domain) {       seconds = seconds || 0; // se ...

  6. mysql存储过程和执行计划案例

    开启event_scheduler指令: SET GLOBAL event_scheduler = ON;SET @@global.event_scheduler = ON;SET GLOBAL ev ...

  7. Kostya Keygen#2分析

    主要就是构造408ede处的2A个字节.. 其中第一个字节必须为0x2D,倒数第二个字节必须为0x36,倒数第三个字节为0x31. 之后,对这个2A字节的缓冲区,要满足一些条件: 1\ 在408ede ...

  8. git操作github仓库基本操作

    一.登录 首次登录 $ git config --global user.name "Your Name" $ git config --global user.email ‘yo ...

  9. Oracle数据库TNS错误解决方法

    ORA-12154: TNS:could not resolve the connect identifier specified ,即无法解析指定的连接 标识符.这说明缺少了一个环境变量,TNS_A ...

  10. 编码 decode & encode

    import sys # python3 中字符编码默认为 utf-8 s = '你好' print(s) # utf-8 转为 gbk (s 默认为 unicode 所以可以直接 encode 成 ...