Groovy Tip 31 Map拾遗

                               Groovy Tip 31 Map拾遗

 

 

在Groovy语言中,Map类有了跟Java语言中的Map类的很大不同,这种不同导致了Groovy语言的Map类比起Java语言的Map相当简单,这些简单之处曾在很多地方提及。除此之外,Groovy语言的Map类还有一些值得注意的地方,要想熟练的使用Groovy语言的Map类对象,我们必须注意这些地方。

首先,当key为字符串时,该字符串是否加引号的效果一样。

如下面的语句:

 

      println (['a':1]==[a:1])

 

结果为:

true

 

同样,下面的语句:

 

      def map = ['a':1]

     

      println map.'a'

     

      println map.a

 

 

结果为:

1

1

 

这就导致了一个问题:如果key是一个变量呢?

 

      def  b = 'c'

     

      def m = [(b):3]

     

      println m."${b}"

 

 

可以看到,如果key是一个变量的话,可以使用小括号加变量名的表示法,如上面的"(b)"。

从上面的例子还可以看出,对于取值操作符"."来说,它的key都是字符串,无论key是否是否加上引号。如map.'a'和map.a都是用来取key值为"a"的值。如果key值的类型是非字符串类型,那么该如何取值呢?

 

      def m1 = [1:'a']

     

      println m1[1]

   

 

对于Map对象的取值来说,Groovy语言也有一项比Java语言方便的地方,就是可以给取值语句赋默认值。即get(key,default),它的返回值为:如果Map对象中存在key值,则返回key值对应的value;如果Map对象中不存在key值,则返回default值。

 

      def map = [a:1,b:2,c:3]

     

      println map.get('a',0)

     

      println map.get('d',0)

   

 

上面语句的结果为:

1

0

 

取值语句还有一点需要注意,当key值字符串中有"."时,就不能使用下面的取值语句:

 

      def map = ['a.b':1]

     

      println map.a.b

 

 

而要使用下面的取值语句:

 

      println map.'a.b'

 

 

那么语句"map.a.b"又表示什么意思呢?

 

      def m1 = [b:2]

     

      def m2 = [a:m1]

     

      println m2.a.b

 

 

上面的语句就能正常执行,当然,如果"m1"是一个GroovyBean对象,而"b"是该对象的一个属性,那么上面的取值语句也是可以正常执行的。

如果Map对象的value为闭包对象时,有文献说下面的语句会报错:

 

      def map = [a:{println 'a'}]

     

      map.a()

 

 

而我们可以测试一下,却发现上面的语句是可以正常执行的。当然,下面的语句也是可以正常执行的:

 

      (map.a)()

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值