Groovy优势2——使用call方法

来源:互联网 发布:大数据开发视频教程 编辑:程序博客网 时间:2024/04/30 14:22

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 0
原创粉丝点击