Groovy优势2——使用call方法

    xiaoxiao2021-03-25  67

    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"}}' } }
    转载请注明原文地址: https://ju.6miu.com/read-35493.html

    最新回复(0)