13.2Groovy使用ExpandoMetaClass注入方法

来源:互联网 发布:修改网卡mac的软件 编辑:程序博客网 时间:2024/05/21 11:35

如果想为类添加多个方法,可以使用ExpandoMetaClass(EMC)DSL语法。

Integer.metaClass {    // 方法1    daysFormNow = { ->        Calendar today = Calendar.instance        today.add(Calendar.DAY_OF_MONTH, delegate)        today.time    }    // 方法2    getDaysFromNow = { ->        Calendar today = Calendar.instance        today.add(Calendar.DAY_OF_MONTH, delegate)        today.time    }    // 方法3    'static' {        isEven = { val -> val % 2 == 0}    }    // 方法4    constructor = { Calendar calendar ->        new Integer(calendar.get(Calendar.DAY_OF_YEAR))    }    // 方法5    constructor = { int val ->        println "Intercepting constructor call"        constructor = Integer.class.getConstructor(Integer.TYPE)        constructor.newInstance(val)    }}println "方法1:" + 1.daysFormNow()println "方法2:" + 2.getDaysFromNow()println "方法3:" + Integer.isEven(3)println "方法4:" + new Integer(Calendar.instance)println "方法5:" + new Integer(5)
运行结果:

方法1:Thu Nov 23 10:58:00 CST 2017
方法2:Fri Nov 24 10:58:00 CST 2017
方法3:false
Intercepting constructor call
方法4:326
Intercepting constructor call
方法5:5

原创粉丝点击