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.注解-@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新特性支持的更多相关文章
- C++ 学习笔记(一些新特性总结3)
C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // ...
- CSS学习笔记之CSS3新特性
目录 1.边框 2.背景 3.文本 4.字体 5.转换 6.过渡 7.动画 8.多列 9.自定义尺寸 CSS 用于控制网页的样式和布局,而 CSS3 是最新的 CSS 标准,这篇文章将着重介绍 CSS ...
- HTML学习笔记之HTML5新特性
目录 1.拖放 2.画布 3.可伸缩矢量图形 4.地理定位 5.Web 存储 6.应用缓存 7.Web Worker 1.拖放 拖放是一种常见的特性,用于抓取对象以后拖到另一个位置,它是 HTML5 ...
- Spring 4支持的Java 8新特性一览
有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览S ...
- Java学习:JDK8的新特性
Java学习:JDK8的新特性 一.十大特性 Lambda表达式 Stream函数式操作流元素集合 接口新增:默认方法与静态方法 方法引用,与Lambda表达式联合使用 引入重复注解 类型注解 最新的 ...
- Java 8 新特性终极版
声明:本文翻译自Java 8 Features Tutorial – The ULTIMATE Guide,翻译过程中发现并发编程网已经有同学翻译过了:Java 8 特性 – 终极手册,我还是坚持自己 ...
- Java 8新特性前瞻
快端午小长假了,要上线的项目差不多完结了,终于有时间可以坐下来写篇博客了. 这是篇对我看到的java 8新特性的一些总结,也是自己学习过程的总结. 几乎可以说java 8是目前为止,自2004年jav ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- 【整理】Java 8新特性总结
闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...
随机推荐
- [CQOI2014]数三角形
[CQOI2014]数三角形 给定\(n\times m\)的网格,求三个点在其格点上的三角形个数,1<=m,n<=1000. 解 法一:直接 显然为组合计数问题,关键在于划分问题,注意到 ...
- 思科模拟器PacketTracer7--利用一台交换机和2台pc互连构成小型局域网
实验二—2 实验工具:思科模拟器PacketTracer7(可在思科官网下载,免费) 实验设备: 交换机一台,PC两台,直连线或选择自动匹配 实验步骤: 一.配置网络拓扑图 连线可选择连通线或闪电符号 ...
- Vue+Element+computed实现购物车
本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见! 该购物车效果采用的是Element-ui库实现的. 采用了computed计算属性来实现逻辑操作. 功能分析: 全选/全不 ...
- vue-quill-editor富文本编辑器,上传图片自定义为借口上传
vue-quill-editor富文本编辑器,上传图片自定义为借口上传 博客地址:https://blog.csdn.net/lyj2018gyq/article/details/82585194
- 《Hello world 团队》第二次作业:团队项目选题报告
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验六 团队作业2:团队项目选题 团队名称 <hello--world团队> ...
- 数据结构与算法之PHP排序算法(桶排序)
一.基本思想 桶排序是将待排序的数据分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法.也是典型的分而治之(divide-and-co ...
- 读《Tooth-Marked Tongue Recgnition Using Multiple Instance Learning and CNN Features》
本人 组会汇报的一篇关于齿痕舌判定的文章,贴上PPT 涉及多示例学习和神经网络方面知识. 准确率有待提高哈哈.
- Ubuntu LNMP系统搭建Zabbix监控
系统环境 操作系统类型:Ubuntu 系统环境版本:4.4.0-122-generic IP地址:192.168.152.118 第一步:选择适当的操作系统类型与各项的版本要求,我这边直接使用LNMP ...
- C# Thread IsAlive 理解
IsAlive的功能就是判断当前线程是否处于活动状态. public class Program { public static void Main(string[] args) { try { Wr ...
- Eclipse在线集成SpringBoot
在线集成下载地址:http://dist.springsource.com/release/TOOLS/update/e4.8/ 注意:需要更改后面的版本号,跟随自己eclipse版本号下载,只需要改 ...