`
JohnnyJian
  • 浏览: 104321 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy学习笔记——as操作符

阅读更多

在Groovy中,as操作符有两种用途:定义导入别名和类型转换。

 

1. 定义导入别名

只要在import一个类或方法的时候使用as操作符,就可以对其进行重命名:

import java.lang.Math as M	// 定义类的别名
assert M.log10(100) == 2

import static M.log10 as log	// 定义方法的别名
assert log(1000) == 3

 

2. 类型转换

语法为“变量 as 类型”,在执行这个操作时,将调用左操作数的类的asType方法:

class A {
    def val
    def asType(Class t) {
        assert t == Integer
        val
    }
}
def a = new A(val:123)
assert a as int == 123	// 这里调用了A#asType方法

也可以使用as操作符把一个map转换成一个bean:

a = [val:321] as A	// 与new A(val:321)功能相同
assert a.val == 321

把一个list用as操作符转换成其他类型时,将使用该类型的合适的构造函数:

class B {
    def a
    def b
    B(a, b) {
        this.a = a
        this.b = b
    }
}
def b = [1, 2] as B	// 这里调用了B(a, b)构造函数
assert b.a == 1 &&  b.b == 2

可以把一个闭包转换成interface,如果该interface中有多个方法,则这些方法都会调用该闭包:

interface X {
    def f()
    def g()
    def h(a)
}

def x = { 100 } as X
assert x.f() == 100
assert x.g() == 100
assert x.h(10) == 100	// 即使带了一个参数,但是还是调用该闭包

def y = { t -> t } as X
assert y.f() == null	// 缺少参数时,用null补足
assert y.g() == null
assert y.h(10) == 10

也可以把一个闭包的map转换成interface:

def z = [f:{ 1 }, g:{ 2 }, h:{ it * 3 }] as X
assert z.f() == 1
assert z.g() == 2
assert z.h(3) == 9
1
0
分享到:
评论
1 楼 agile_boy 2008-02-01  
呵呵,用Groovy实现Java的interface还是很方便的。

相关推荐

Global site tag (gtag.js) - Google Analytics