加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy Tip 20 “as”关键字的用法

发布时间:2020-12-14 16:59:08 所属栏目:大数据 来源:网络整理
导读:? ???????????? Groovy Tip 20 ? “ as ”关键字的用法 ? ? 在 Groovy 语言中,“ as ”关键字是非常重要的,它同样是体现 Groovy 语言作为敏捷式语言的一个重要方面。 “ as ”关键字在 Groovy 语言中最为常用的用法是进行强制类型转换,这相对于 Java 语言
?

???????????? Groovy Tip 20? as”关键字的用法

?

?

Groovy语言中,“as”关键字是非常重要的,它同样是体现Groovy语言作为敏捷式语言的一个重要方面。

as”关键字在Groovy语言中最为常用的用法是进行强制类型转换,这相对于Java语言来说,就显得编码起来比较容易,请看下面的例子。

?

?????? List list = new ArrayList();

?????? list.add("1");

?????? list.add("2");

??????

?????? ArrayList list1 = (ArrayList)list;

?

可以看到,在Java语言中,进行强制类型转换使用的是括号加上要转换的类型,如上面的“(ArrayList)”,而在Groovy语言中则是如下的样子:

?

??? ? List list = ['a','b']

??? ?

??? ? ArrayList list1 = list as ArrayList

??? ?

??? ? println list1

???

?

可以看到,在Groovy语言中,进行强制类型转换使用的是“as”加上要转换的类型,如上例中的“as ArrayList”。因为括号的输入是先要按下“Shift”键,然后在按下括号键,没有直接键入“as”方便。所以Groovy语言的强制类型转换要比Java语言来得快捷。

当然,Groovy语言的强制类型转换并不一定非要“as”关键字不可,比如上面的代码完全可以写成下面的样子:

?

??? ? List list = ['a','b']

??? ?

??? ? ArrayList list1 = list

??? ?

??? ? println list1

???

?

这就更加的简单了,充分的体现了Groovy语言的简单易用的特点。

这还不是它的最简单之处,Groovy语言的强制类型转换比之Java语言更为简单之处体现在数组与List之间的转换。请先看Java的例子:

?

?????? List list = new ArrayList();

?????? list.add("1");

?????? list.add("2");

??????

?????? String[] strs = (String[])list.toArray(new String[0]);

??????

?????? System.out.println(strs[0]);

?

可以看到,Java语言在数组和List之间的转换是相当麻烦的。而我们的Groovy语言就显得简单多了:

??? ?

??? ? List strs = ['a','b']

??? ?

??? ? String[] strs1 = strs as String[]

??? ?

??? ? println strs1

?

?

当然了,你也完全可以把“as”关键字去掉,如下:

?

??? ? List strs = ['a','b']

??? ?

??? ? String[] strs1 = strs

??? ?

??? ? println strs1

?

?

Java语言在数组和List之间的转换的麻烦之处还在于,如果从数组转换为List,则又是另外的一个方法,如下:

?

?????? String[] strs = new String[]{"1","2"};

??????

?????? List list = Arrays.asList(strs);

??????

?????? System.out.println(list.get(0));

?

?

Groovy语言中则统统直接使用关键字“as”,如下:

?

??? ? String[] strs = ['a','b']

??? ?

??? ? List list = strs as List

??? ?

??? ? println list

?

?

当然,你也可以把关键字“as”去掉,如下:

?

??? ? String[] strs = ['a','b']

??? ?

??? ? List list = strs

??? ?

??? ? println list

?

?

上面关于关键字“as”的用法已经是够激动人心的了,但Groovy语言还没有完,它还赋予“as”关键字另外一个激动人心的用法。那就是类似于sql语言中的“同义词”的“as”用法,请看下面的例子:

import? groovy.xml.MarkupBuilder

?

class Person

{

??? String name

??? String age

??? String addr

}

?

class Testor {

?

? static void main(args) {

??? ?

??? ? def out? =?? new? StringWriter()

???

??? ? def xml? =?? new? MarkupBuilder(out)

??? ?

??? ? def list = [new Person(name:'Tom',age:'33',addr:'Shenzhen'),

??? ????????????? new Person(name:'Alice',age:'22',addr:'Taibei')]

??? ?

??? ? xml.persons{

?????? ?

?????? ? for(p in list){

?????????? ? person{

????????????? ? ? for(prop in p.properties)

????????????? ? ? {

????????????? ? ????? if(prop.key!='metaClass'&&prop.key!='class')

????????????? ? ????? {

????????????? ? ???????? "$prop.key" prop.value

????????????? ? ????? }

????????????? ? ? }

?????????? ? }

?????? ? }

?????? ?

??? ? }

??? ?

??? ? println out.toString()

???

? }

?

}

?

?

代码有点长,其实完全可以不用把全部的代码拷出来,但为了读者能够直接运行我们的例子,就全部拷了出来。现在我们只关心下面这句:

?

def xml? =?? new? MarkupBuilder(out)

?

这是一个简单的初始化一个对象的语言,平淡无奇。但麻烦的是,我们在输入类名“MarkupBuilder”的时候,由于我们是引用的类,可以说我们对这个类不是很熟悉,所以输入这个类名就相当的麻烦,“MarkupBuilder”还算是比较短的,在编码的过程中,我们会遇到很多类名很长的类,这样输入起来就更加的麻烦。

Groovy语言为我们提供了“as”关键字来简化上面提出的问题,比如上面的例子就可以写成下面的样子:

import? groovy.xml.MarkupBuilder as MB

?

class Person

{

??? String name

??? String age

??? String addr

}

?

class Testor {

?

? static void main(args) {

??? ?

??? ? def out? =?? new? StringWriter()

???

??? ? def xml? =?? new? MB(out)

??? ?

??? ? def list = [new Person(name:'Tom',addr:'Taibei')]

??? ?

??? ? xml.persons{

?????? ?

?????? ? for(p in list){

?????????? ? person{

????????????? ? ? for(prop in p.properties)

????????????? ? ? {

????????????? ? ????? if(prop.key!='metaClass'&&prop.key!='class')

????????????? ? ????? {

????????????? ? ???????? "$prop.key" prop.value

????????????? ? ????? }

????????????? ? ? }

?????????? ? }

?????? ? }

?????? ?

??? ? }

??? ? println out.toString()

???

? }

?

}

?

?

可以看到,我们首先使用“as”关键字对类名进行“同义词”的转换,即:

?

import? groovy.xml.MarkupBuilder as MB

?

然后,我们就可以以“MB”来代替“MarkupBuilder”了,如下:

?

?

??? ? def xml? =?? new? MB(out)

?

?

是不是很简单,总之,这也是“as”关键字的一个很有趣的用法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读