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

Groovy将代码添加到构造函数中

发布时间:2020-12-14 16:32:35 所属栏目:大数据 来源:网络整理
导读:在Groovy中是否有一种方法可以在实例化类时向构造函数添加代码?我有一个Groovy类(但我不能修改这个特定的源代码),但我希望有一种方法可以注入代码(可能通过元类),所以我的代码作为构造函数的一部分运行(在此case只有一个,默认构造函数). 谢谢, 杰夫 解决方
在Groovy中是否有一种方法可以在实例化类时向构造函数添加代码?我有一个Groovy类(但我不能修改这个特定的源代码),但我希望有一种方法可以注入代码(可能通过元类),所以我的代码作为构造函数的一部分运行(在此case只有一个,默认构造函数).

谢谢,
杰夫

解决方法

你可以覆盖构造函数,但这有点棘手,特别是如果你要覆盖默认的构造函数.您需要为类的metaClass.constructor指定闭包,闭包应该返回一个新实例.棘手的部分是,如果你调用你重写的构造函数,你将进入一个递归循环并产生一个堆栈溢出.您需要另一种方法来获取类的实例,例如不同的构造函数.

对于测试,有时可以绕过这个限制.通常,首先实例化一个对象就足够了,然后覆盖构造函数以返回现有实例.例:

class MyObject {
    String something
    MyObject() { something = "initialized" }
}

testInstance = new MyObject()
testInstance.something = "overriden"
MyObject.metaClass.constructor = { -> testInstance }

aNewObject = new MyObject()
assert aNewObject.is(testInstance)
assert aNewObject.something == "overriden"

(编辑:李大同)

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

    推荐文章
      热点阅读