Groovy学习笔记
发布时间:2020-12-14 17:01:24 所属栏目:大数据 来源:网络整理
导读:由于工作需要,今天看了看Groovy,下面是学习过程的学习笔记: 基本原则:Java完全可以调用Groovy写好的类;Groovy完全可以调用Java写好的类;即使不使用Groovy的特有的语法,可以使用Java中的绝大部分传统写法。 1 如果使用 groovy.lang.*,grooby.util.*,ja
由于工作需要,今天看了看Groovy,下面是学习过程的学习笔记:
基本原则:Java完全可以调用Groovy写好的类;Groovy完全可以调用Java写好的类;即使不使用Groovy的特有的语法,可以使用Java中的绝大部分传统写法。 1 如果使用 groovy.lang.*,grooby.util.*,java.lang.*,java.util.*,java.net.*中的类的时候无需import。 2、支持assert,比如assert 1==1,assert(true) 更高级的用法:assert('text'.3<<'hello').size==4*3+5 3、groovy支持弱类型声明def x=1 4、GroovyBean class Book { ?? String title;//声明的是属性,而非字段 } def g = new Book() print g.title print g.getTitle() 5 groovy中的==表示等于(equality),而非同一(identity),这与java不同。 6 def nick = 'Gina' def book = 'Groovy' assert '$nick is $book' = 'Gina is Groovy' 7 使用正则判断字符串匹配:assert '12345'=~/d+/ 8 groovy中可以直接对Integer类型使用四则运算,可以对int类型调用toString方法。 9 使用list: def r =['a','b','c'] assert r[0]='a' assert r.size()==9 使用map: def http=[100:"cont",200:'ok'] assert http[200]=='ok' http[800]='what?' 使用ranges: def x=1..10 assert x.contains(5) 10 闭包: (1)[1,2,3].each{entry->println entry} (2)累加计算:其中upto表示从1遍历到10 def? counter=0 1.upto(10) { ?? number-> ?? counter = counter+number } println counter 11 动态执行:evaluate('1+2') 会打印出3 12 groovy中类型可以弱类型声明,也可以强类型声明,并且声明的时候会自动进行boxing,比如def a=1是可以的,int a=1也是可以的,而且第二种用法中声明的a是Integer类型的。 13 Groovy支持运算符重载,其实现方式和python类似,也就是类只要实现某个方法即可实现运算符重载,下面是运算符和对应方法:+ plus;- minus;* multiply;/ div;% mod;++ next;-- previous;** power;| or;& and;^ xor;~ negate;a[b] a.getAt(b);a[b] = c a.putAt(b,c);a<<b a.leftShift(b);a>>b a.rightShift(b);a>>>b a rightShiftUnsigned(b); switch(a){case b:} b.isCase(a);a==b a.equals(b); a<=>b a.compareTo(b); a>b a.compareTo(b)>0; a>=b a.compareTo(b)>=0; a<b a.compareTo(b)<0; a<=b a.compareTo(b)<=0; a as type a.asType(typeClass) 14 字符串操作: g="Hello Grooby!" assert g[6..11] == 'Groovy' assert g.count('0')==3 assert 'x'.padLeft(3)=='? x' assert 'x'.padRight(3,'_')=='x__' assert 'x'.center(3)==' x ' assert 'x'*3=='xxx' 15 字符串的LeftShift和切片的应用 g='Hello' g<<' Groovy' assert g instanceof java.lang.StringBuffer g<<'!' assert g.toString()=='Hello Groovy!' g[1..4] = 'i'//替换ello为i,切片的典型应用 assert g.toString()=='Hi Grooby!' list等collection类型同样支持切片 16 数字的方法: def s = '' 10.times{s+='x'} 10.downto(0){x+='d'} s='' 0.step(0.5,0.1){number-> s+=number+' ' } assert s=='0 0.1 0.2 0.3 0.4' 17 List的常见操作 assert [1,[2,3]].flattern()==[1,3]//扁平化 assert [1,3].intersect([4,3,1])==[3,1]//交集 assert [1,3].disjoint([4.5,6]) list = [1,3] assert list.pop()==3//像使用堆栈一样 assert [3,1,2].sort()==[1,3] assert [1]==[1,1].unique()//去掉重复元素
def list=[1,3]
assert list.count(2)==1 assert list.max()==3 assert list.min()==1 def even = list.find{item-> ?item%2==0 } assert even ==2 assert list.every{item-> ?item<5 }//所有的都小于5 assert list.any{item-> ?item<2 }//任何一个小于5 list.reverseEach{item-> ?store+=item }//反向遍历
assert [1,3].join('-')=='1-2-3'
for(i in [1,3]) { ?? println i } 18 文件处理: new File('a.txt').eachLine{println it} 19 groovy中xml处理非常简单,可以参考blogjava上的一篇名为“Groovy高效编程――生成XML文件”的文章。 20 Groovy中使用Swing构建界面: import grooby.swing.SwingBuilder
swing = new SwingBuilder() frame = swing.frame(titile:'Demo'){ ? menuBar{ ??? menu('File'){ ??????? menuItem 'New' ??????? menuItem 'Open' ??? } ? } ? panle{ ??? label 'Label my' ??? slider() ??? comboBox(items:['1','2','3']) ? } } frame.pack() frame.show() 21 groovy中简化了jdbc访问数据库的方法,提供了execute、eachRow等方法,无需开发人员关心关闭连接等问题。 22 java中运行grooby脚本的方法: GroovyShell shell = new GroovyShell() Object result = shell.evaluate("12+23") 23 Groovy解析引擎的类为GroovyScriptEngine def engine = new GroovyScriptEngine(".") def value = engine.run("test/MyScript.grooby",new Binding())
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |