Groovy学习笔记-Java 5新特性支持

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.注解[email protected]

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
*/

[email protected]单例

@Singleton(lazy = true)
class TheUnique{
    def sayHello(){
        println ‘hello‘
    }
}

TheUnique.instance.sayHello()

/*output
hello
*/
时间: 2024-10-29 19:09:59

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

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

C++ 学习笔记(一些新特性总结 1) 虽然我也用了 C++ 有挺多年了,但是一直本着够用就行的原则,没有特别深入的学习过C++ 的语法,所以好多高级的 C++ 特性都不了解.正好最近从网上找到了本书<C++ 14 Quick Syntax Reference>,挺薄的一本书,只有 100多页,但是覆盖了基本所有 C++ 的特性.这个小短文就是我看这本书时摘抄下来的一些我以前没有注意到的知识点. 文中所有代码都在 gcc version 5.3.0 (Rev1, Built by MSYS2

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

C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // Unrestricted access int myPublic; protected: // Defining or derived class only int myProtected; private: // Defining class only int myPrivate; } class

html5学习笔记之入新特性

<header>定义页眉 <footer>定义页脚 <nav>定义导航栏 <section>定义文档中的区段 <article>定义外部的内容,外部内容可以是来自一个外部的新闻提供者的一篇新的文章,或者来自 blog 的文本,或者是来自论坛的文本.亦或是来自其他外部源内容. <aside>定义article以外的内容 <audio>定义声音 <video>定义视频,比如电影片段或其他视频流 <canvas

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

有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览Spring 4.0和4.1已经支持的Java 8新特性. Spring 4支持Java 6.7和8 Java 8编译器编译过的代码生成的.class文件需要在Java 8或以上的Java虚拟机上运行.由于Spring对反射机制和ASM.CGLIB等字节码操作函数库的重度使用,必须确保这些函数库能理解

Java 8新特性前瞻

快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年java 5发布以来的java世界中最大的事件了.它带来了java语言层面上的诸多改变,主要包括下面一些方面:语法.编译器.库.工具和运行时. 一,语法层面: 1,Lambda表达式. lambda表达式是一种可调用对象,它允许我们将函数作为函数参数传入.诸如C++.Groovy.Scala都已经支持la

Java 8 新特性 – 终极手册整理

1.简介 毫无疑问,Java 8是自Java  5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器.类库.开发工具和JVM(Java虚拟机).在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景. 本教程由下面几部分组成,它们分别涉及到Java平台某一特定方面的内容: 语言 编译器 类库 开发工具 运行时(Java虚拟机) 2.Java的新特性 总体来说,Java 8是一个大的版本升级.有人可能会说,Java 8的新特性非常令人

【整理】Java 8新特性总结

闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS 版本,和过去的 Java 大版本升级不同,它们只有半年左右的开发和维护期.而未来的 Java11,也就是 18.9 LTS,才是 Java 8 之后第一个 LTS 版本(得到 Oracle 等商业公司的长期支持服务).所以Java 8 就成了最新的一次LTS版本升级,这也是为什么Java开发者对J

Java 11 新特性介绍

Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个大版本,每个季度发布一个中间特性版本,并且做出不会跳票的承诺.通过这样的方式,Java 开发团队能够将一些重要特性尽早的合并到 Java Release 版本中,以便快速得到开发者的反馈,避免出现类似 Java 9 发布时的两次延期的情况. 按照官方介绍,新的版本发布周期将会严格按照时间节点,于每年

Java 8新特性探究(八)精简的JRE详解

http://www.importnew.com/14926.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 Java 8新特性探究(八)精简的JRE详解 2015/02/05 | 分类: 基础技术 | 0 条评论 | 标签: JRE 分享到:2 原文出处: 成熟的毛毛虫的博客 Oracle公司如期发布了Java 8正式版!没有让广大javaer失望.对于