Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用ExpandoMetaClass添加构造函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在写测试用例的时候,要构造测试数据,发现有一个类没有认的构造函数,而又不希望使用用户定义的构造函数,另外也不想修改生产源代码,因此需添加一个认的构造函数. 使用Groovy的ExpandoMetaClass就可以实现,具体文章看这里( http://groovy.codehaus.org/ExpandoMetaClass+-+Constructors)
通过ExpandoMetaClass增加构造函数增加方法有些不同,不过其本质是给constructor 这个"特殊"的属性通过<<或=操作符赋一个闭包,而参数就是该构造函数的参数.
class Book {
    String title
}
Book.MetaClass.constructor << { String title -> new Book(title@R_953_6964@) }
def b = new Book("The Stand")


不过这里有一点需要特别注意,如果需要覆盖原有的认构造函数,有可能出现堆栈溢出,比如这样写:
class Book {
    String title
}
Book.MetaClass.constructor = {  new Book() }
def b = new Book("The Stand")


其原因是因为通过Groovy的MetaClass循环调用了相同的认构造函数,避免出现这种情况的做法是使用Spring的BeanUtils方法:
class Book {
    String title
}
Book.MetaClass.constructor = {  BeanUtils.instantiateClass(Book) }

def b = new Book("The Stand")

大佬总结

以上是大佬教程为你收集整理的使用ExpandoMetaClass添加构造函数全部内容,希望文章能够帮你解决使用ExpandoMetaClass添加构造函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。