Groovy优势2——使用call方法

Groovy优势2——使用call方法

在Groovy中我们给类可以增加call方法,然后隐式调用call方法。调用时,仅需输入括号和可选的参数,使用Groovy 写DSL尤其有用。同时可以增加多个带不同参数的call方法实现重载,在运行时根据参数决定。

代码示例

下面示例代码定义了User类,带了call方法的实现。调用时并没有输入方法的名称,甚至没有使用括号,仅传递参数。

class User {
    String userName;
    String address;

    def call(final String userName){
        this.userName = userName
        this
    }

    def call(final Map data){
        userName = data.get("userName") ?: userName
        address  = data.get("address")  ?: address
        this
    }

    def call(final Closure runCode){
        runCode this
    }

    static void main(String [] args){
        User user = new User( userName:"tommy",address:"xuzhou")

        user "jack"
        assert user.userName == "jack" // call with string parameter

        Map data = [userName:"tommy",address:"shanghai"]

        user data  // call with map parameter

        assert "tommy"  == user.userName 
        assert "shanghai" == user.address  //true

        user{
            println it.address  // shanghai  call with Closure
        }

        //call with Closure
        def json =  user {
            new groovy.json.JsonBuilder(["user": ["name": it.userName, "address": it.address]]).toString()
        }

        assert json == '{"user":{"name":"tommy","address":"shanghai"}}'
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值