加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy:向类中动态添加属性

发布时间:2020-12-14 16:45:59 所属栏目:大数据 来源:网络整理
导读:Groovy:向类中动态添加属性 概述 使用Groovy中类的时候,虽然开始的时候会设定一些属性,但是运行的时候想在不修改源码的情况下,支持新的属性,可能就要借助与Groovy提供的动态编程的力量了。 调用类的属性的时候,如果属性不存在会调用类的 def propertyM

Groovy:向类中动态添加属性

概述

使用Groovy中类的时候,虽然开始的时候会设定一些属性,但是运行的时候想在不修改源码的情况下,支持新的属性,可能就要借助与Groovy提供的动态编程的力量了。

调用类的属性的时候,如果属性不存在会调用类的

def propertyMissing(String name,value);

或者

def propertyMissing(String name);

如果是setter形式的调用属性那么是调用前者,getter是调用后者。如果是处理不存在的方式是:

def methodMissing(String name,args);

这里就不再赘述。

Adding properties to domain classes on the fly using groovy propertyMissing feature这篇文章对于属性的动态添加处理有了相对详细的叙述,但是给出的代码在调试的时候,没有通过,因此写了自己的版本。

实现

首先实现一个支持属性动态添加的基类

class DynamicEntity { def dynamicProperties = [:] //setter def propertyMissing(String name,value) { dynamicProperties.put(name,value) } //getter def propertyMissing(String name) { dynamicProperties.get(name) } }

然后让自己定义的类继承这个基类即可。

class VisualTreeNode extends DynamicEntity{
    def String element
    def VisualTreeNode left
    def VisualTreeNode right
}

最后,在使用的时候就可以放心地使用了。当然这种情况下,可能会出现属性积压的情况,后面会添加处理属性的方法,包括去除不必要的属性,限定支持的属性名。

说明:如果对于不存在的属性先调用getter方法,那么返回的值就是null。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读