用Groovy思考 第四章 Groovy特性深入
发布时间:2020-12-14 16:53:03 所属栏目:大数据 来源:网络整理
导读:用Groovy思考 第四章 Groovy特性深入 作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs 1. 断言 Java开发者常常使用JUnit或TestNG做单元测试,所以对断言是很清楚的。断言是用于验证假设的条件是否为真。在Groovy的断言中,如果假设的条件不
用Groovy思考 第四章 Groovy特性深入作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs 1. 断言Java开发者常常使用JUnit或TestNG做单元测试,所以对断言是很清楚的。断言是用于验证假设的条件是否为真。在Groovy的断言中,如果假设的条件不为真,那么就会抛出java.lang.AssertionError异常。使用Groovy表达式来测试假设条件。比如: groovy:000> assert 1==2 : "One isn't Two" ERROR java.lang.AssertionError: One isn't Two. Expression: (1 == 2) ? ? ? ? at groovysh_evaluate.run (groovysh_evaluate:2) ? ? ? ? ... Java的断言也是这么写的: assert 1==2 : "One isn't Two"; 可见,Groovy的断言语法与Java的断言相同,Groovy的断言可以省略分号。 断言的使用技巧: 当你使用断言时,你应用包含一条消息。此消息可以帮助其他人维护和理解你的代码,理清你的意图。 2. 强断言Groovy的断言assert关键字仅仅是检查表达式是否为真。如果为假,断言仅仅告诉开发者,表达式不成立,以及表达式使用的变量值,除此以外什么都没有。如果使用强断言,断言的输出会提供表达式的每一个子表达式的可视化展现。下面我将详细说明强断言。groovy:000> assert 1==1: "One isn't Two" ===> null groovy:000> assert new File('HelloWorld.txt')==new File('Hello.txt') ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert new File('HelloWorld.txt')==new File('Hello.txt') ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? | | ? ? ? ?HelloWorld.txt ? ? ? ? ? ?| Hello.txt ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?false ? ? ? ? at groovysh_evaluate.run (groovysh_evaluate:2) ? ? ? ? ... 断言可以方便地对代码进行测试。 3. StringsGroovy支持两种字符串:常规的Java字符串和GStrings。在Groovy中,用单引号或双引号括起来的字符串是java.lang.String类的一个实例, GStrings是groovy.lang.GString类的一个实例,它允许在文本中包含占位符。GStrings并不是String的子类,因为String类是final类型,而且是不能被扩充的。 GString很像普通的字符串,但是他允许在其内使用${..}嵌入变量。如果内嵌的变量只是占位符,那么可以省略{}花括号。 Groovy支持一些编程语言如Perl或Ruby所谓的字符串插入(String Interpolation)。字符串插入是字符串内的表达式或变量的替代。如果你熟悉Unix Shell编程或Ruby、Perl编程,那么你应该很熟悉这一点。 Java不支持字符串插入,你必须手动的进行值连结。 Java的字符串操作例子: String name = "Jim"; String helloName = "Hello " + name; System.out.println(helloName); 如果是使用Groovy的GString,那么可以这样: groovy:000> str1 = "Li Sir" groovy:000> str2 = "Hello " groovy:000> println "$str2$str1" Hello Li Sir 可见,正如前面所讲,如果内嵌的变量只是占位符,那么可以省略{}花括号。 当Groovy看到表达式内的内嵌变量时,Groovy会构造一个org.codehaus.groovy.runtime.GStringImpl来代替java.lang.String。当访问GString时,表达式会被重新计算。 注意,你可以在${}内包含任意有效的Groovy表达式,可以是方法调用或变量名。 4. 单行字符串单行字符串可以用单引号或双引号包围,但是两者是有区别的。单引号包围的表达式,里面的字符串插值是不会被识别的。双引号包围的表达式正好相反。 举例: name = "LiSir" s1 = 'Hello $name' println s1 输出: Hello $name 例子: name = "LiSir" s1 = "Hello $name" println s1 输出: Hello LiSir 可见,由双引号定义的字符串,其内嵌的表达式会被解释。 5. 多行字符串Groovy支持字符串跨越多行,多行字符串由三个双引号或者三个单引号定义。多行字符串对于创建模板(如XML模板)或内嵌的文档(SQL语句、HTML等)是非常有用的。还有很多用途。比如,可以使用多行字符串和字符串插值建立电子邮件的主体内容。 比如: def name = "Jim" def multiLineQuote = """ Hello,${name} This is a multiline string with double quotes """ println multiLineQuote println multiLineQuote.class.name def multiLineSingleQuote = ''' Hello,${name} This is a multiline string with single quotes ''' println multiLineSingleQuote println multiLineSingleQuote.class.name 输出: Hello,Jim This is a multiline string with double quotes org.codehaus.groovy.runtime.GStringImpl Hello,${name} This is a multiline string with single quotesjava.lang.String (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |