Groovy Tutorial 笔记

Groovy Tutorial 笔记
官网上的例子会更多,更详细一些


1:object?.method调用的时候,如果对象是空,不会抛出异常,只会返回一个null

在.Groovy中间中使用单独的一个中文"" String的时候,有可能会提示错误,加个空格就好,比较奇怪

字符串String中加入$xx符号后, 就可以成为GString,可以方便的使用运行符进行操作,包括==
其中的$操作的默认数据并不会一直绑定,只会在声明的时候,进行String的生成,后面都不会进行修改,如果需要进行数据绑定
可以使用Closure
def fullname = "$firstname $surname" //不带绑定
fullname = "${-> firstname} $surname" //带Bindable

字符串方法的调用,并不会修改掉源对象

加入过滤的查询,返回一个List
words.findAll{w -> w == w.reverse() && w.size() > 5}

数字比较特殊的一个运算符
assert 4 <=> 3 == 1 调用的等同于 4.compareTo(3) 结果应该是介于-1,0,1之间

日期的操作

静态导入以及重命名
import static java.util.Calendar.getInstance as now
使用时候now().time

import static Integer.*
可以直接使用其中的静态方法


日期方便的操作
new Date() + 1.hour + 3.weeks - 2.days
new Date() + 1 //默认是加上一天

格式化日期
input = "1998-06-03"
df1 = new SimpleDateFormat("yyyy-MM-dd")
date = df1.parse(input)

集合和区间(Range)的使用

assert [1,2,3,4] == (1..4)

Map的key可以直接声明为一个对象,不过最终也被转换成字符串的形式
def map = [a:1, 'b':2]

List.groupBy { it.属性 } 可以方便的按照指定的属性进行分组排序,注意返回的结果会比较特殊

assert "1.23".replaceAll(/./){ ch ->
ch.next()
} == '2/34' 会使用.符号的下一位编码进行转换 (){}的配合 就是replaceAll中传入了2个参数,方便的操作匹配的结果

控制语句
只要对象不是null或者size!=0,或者现实的false,那么都是true

List*.属性 会返回集合内所有的该属性组成的集合

闭包
doubleNum = { num -> num * 2 } 区别与方法是=的存在
调用时候可以直接doubleNum(3),就和普通的方法定义一样, 不过这里的返回结果是最后一行的表达式,也可以使用(){}传递多个参数

使用闭包封装参数
map = ['a': 1, 'b': 2]
doubler = {key, value -> map[key] = value * 2}
map.each(doubler)

这里用一个闭包,接收了each所传递的两个参数

另外一种接受的形式
def doubleMethod(entry) {
map[entry.key] = entry.value * 2
}
doubler = this.&doubleMethod
map.each(doubler)
使用this.&Closure名进行复制 ----该方法似乎无效了

[1, 2, 3].grep{ it < 3 } == [1, 2] //进行过滤

any和every进行判断

collect对每一个对象进行操作,并且累计结果
(1..9).collect{it}.join() == '123456789'

实现比较大小
def min = { x, y -> [x, y].min() }

XML操作

从一个List创建一个XML
// create XML as input
def input = new XStream().toXML(athleteList)

解析一个XML
def records = new XmlSlurper().parseText(XML)


简单的SQL连接
def foo = 'cheese'
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/mydb", "user","pswd", "com.mysql.jdbc.Driver")

sql.eachRow("select * from FOOD where type=${foo}") {
println "Gromit likes ${it.name}"
}

使用DataSets
连接同上
def food = sql.dataSet('FOOD')
def cheese = food.findAll { it.type == 'cheese' }
cheese.each { println "Eat ${it.name}" }


com.thoughtworks.xstream这个包好像还不错
进行Groovybean到xml的转换
生成的东西视乎是序列化时用到的格式

Groovy进行测试

与Junit3.3结合就是继承 extends GroovyTestCase
然后使用testMethod(方法名) 来进行测试

如果结合Junit4.4,可以使用Annotation的方式进行
可以使用静态导入assert部分,方便使用
import static org.junit.Assert.assertEquals

@Test(expected=ArithmeticException)
void divideByZero() {
println 1/0
}
这个用于测试异常情况

至于JUnitCore.main(ArithmeticTest.name) 暂时不懂什么意思

@Before 注解用于定义初始化的方法,@After 则是在测试结束时候

Junit4.4下的测试还包括了
@RunWith(Theories)
@RunWith(Parameterized) 需要了解

调用远程服务的方法
import groovy.net.soap.SoapClient
proxy = new SoapClient("http://www.webservicex.net/CurrencyConvertor.asmx?WSDL")
rate = proxy.ConversionRate("USD", "EUR")
println rate....

与Spring整合
可以方便的使用@Component 以及@AutoWired进行注入

详细例子看官网上的更多...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值