Groovy优势2——使用call方法

本文介绍了Groovy语言中call方法的应用,展示了如何通过增加call方法实现类的动态调用,包括方法重载及闭包的使用。通过具体示例说明了如何不显式调用方法名而直接传递参数来调用call方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"}}'
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值