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 ...
随机推荐
- samtools 使用简述
功能如下: 1.View 主要功能讲sam文件转位bam文件. 涉及的参数: -b 输出bam格式..默认是sam文件 -h 输出的sam文件带header..默认不带 -H 仅仅输出header - ...
- ElasticSearch改造研报查询实践
背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...
- erlang下lists模块sort(排序)方法源码解析(二)
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...
- git同时存在两个账号(在同一台电脑上)——三步完成
目录 1.首先是常规设置 2.同时添加两个账号 3.最后一步,配置~/.ssh/config文件 4.补充:有时因为设置了全局账号,因此需要清除 由于本人有连个git账号,个人github账号和公司g ...
- JSP 标准标签库JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供 ...
- Vue2.0增删改查案例(Vue+Less+LocalStorage)
本人写的小程序,功能还在完善中,欢迎扫一扫提出宝贵意见! Vue+Less+LocalStorage 安装Less:npm install less less-loader --s ...
- java中JScrollPane不显示水平滚动条的解决办法
在JPanel中添加了表格,表格中对东西太多,需要水平滚动条滑动才能够完全找到所有数据,如果没有水平滚动条的话,数据堆积在一起,无法分开 做法是: 第一步:先将表格自动调整的状态给关闭掉:table. ...
- XCube和X组件的入门级使用教程
我也是一个入门级的初学者,在学习魔方的时候,很多不是很懂的地方,而网上的资料又比较少.尤其是Newlife的论坛打不开的情况下 所以就想着把这个初级项目做完后,做一个入门级教程.保证人人都看得懂(.^ ...
- 用tar压缩xz格式出错
解决办法 安装xz软件包 yum install xz -y
- js 实现异步上传图片+预览
两种js实现方式,一种用原生的ajax:另一种用JQuery,例子比较简单,直接上代码. <!DOCTYPE html> <html> <head> <tit ...