【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 属性缺失 propertyMissing 函数回调 | 方法缺失 methodMissing 函数回调 )





一、属性缺失 propertyMissing 函数回调



在定义类时 , 重写 propertyMissing 方法 ;

如果访问不存在的属性 , 则不会报错 , 而是回调 propertyMissing 方法 ;

    def propertyMissing(String name) {
        println "propertyMissing($name)"
        return null
    }

    def propertyMissing(String name, def arg) {
        println "propertyMissing($name, $arg)"
    }

代码示例 :

class Student {

    def propertyMissing(String name) {
        println "propertyMissing($name)"
        return null
    }

    def propertyMissing(String name, def arg) {
        println "propertyMissing($name, $arg)"
    }
}

def student = new Student()

// 访问不存在的属性
// 如果实现了 propertyMissing 方法
// 则不会报错 , 而是回调 propertyMissing 方法
student.age = 19

执行结果 :

propertyMissing(age, 19)




二、方法缺失 methodMissing 函数回调



在定义类时 , 重写 methodMissing 方法 ;

如果调用不存在的方法 , 则不会报错 , 而是回调 methodMissing 方法 ;

    def methodMissing(String name, def args) {
        println "methodMissing($name, $args)"
        return null
    }

代码示例 :


class Student {
    def methodMissing(String name, def args) {
        println "methodMissing($name, $args)"
        return null
    }
}

def student = new Student()

// 调用对象不存在的方法
// 如果实现了 methodMissing(String name, def args) 方法
// 则不会报错 , 而是调用上述 methodMissing 方法
student.hello()

执行结果 :

methodMissing(hello, [])




三、完整代码示例



完整代码示例 :


class Student {

    def propertyMissing(String name) {
        println "propertyMissing($name)"
        return null
    }

    def propertyMissing(String name, def arg) {
        println "propertyMissing($name, $arg)"
    }

    def methodMissing(String name, def args) {
        println "methodMissing($name, $args)"
        return null
    }
}

def student = new Student()

// 调用对象不存在的方法
// 如果实现了 methodMissing(String name, def args) 方法
// 则不会报错 , 而是调用上述 methodMissing 方法
student.hello()

// 访问不存在的属性
// 如果实现了 propertyMissing 方法
// 则不会报错 , 而是回调 propertyMissing 方法
student.age = 19

执行结果 :

methodMissing(hello, [])
propertyMissing(age, 19)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值