栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

动态创建Groovy类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态创建Groovy类

我已经或多或少地能够通过使用GroovyClassLoader和SimpleTemplateEngine使其工作。这是代码:

class ClassBuilder {    GroovyClassLoader loader    String name    Class cls    def imports    def fields    def methods    def ClassBuilder(GroovyClassLoader loader) {        this.loader = loader        imports = []        fields = [:]        methods = [:]    }    def setName(String name) {        this.name = name    }    def addimport(Class importClass) {        imports << "${importClass.getPackage().getName()}" +     ".${importClass.getSimpleName()}"    }    def addField(String name, Class type) {        fields[name] = type.simpleName    }    def addMethod(String name, Closure closure) {        methods[name] = closure    }    def getCreatedClass() {        def templateText = '''<%imports.each {%>import $itn <% } %> class $name{<%fields.each {%>    $it.value $it.key n<% } %>}'''        def data = [name: name, imports: imports, fields: fields]        def engine = new groovy.text.SimpleTemplateEngine()        def template = engine.createTemplate(templateText)        def result = template.make(data)        cls = loader.parseClass(result.toString())        methods.each { cls.metaClass."$it.key" = it.value        }        return cls    }}

这是我如何使用它动态创建类的示例:

import java.util.Calendardef builder = new ClassBuilder(this.class.classLoader)builder.setName("MyClass");builder.addimport(Calendar)builder.addField('field1', Integer)builder.addField('field2', Integer)builder.addMethod('sum') { field1 + field2 }builder.addMethod('product') { field1 * field2 }builder.addMethod('testCalendar') {    println Calendar.getInstance().getTime()}Class myClass = builder.getCreatedClass()def myInstance = myClass.newInstance()myInstance.field1 = 1myInstance.field2 = 2println myInstance.sum()println myInstance.product()myInstance.setField2(1500)println myInstance.getField2()myInstance.testCalendar()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451620.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号