groovy - 如何制作 "StringWriterMarkupBuilder"

标签 groovy

如何创建一个 MarkupBuilder 类型,但具有使用 StringWriter 初始化的默认构造函数,并重写 toString() 来调用 StringWriter 上的 toString()

想法如下,但当然不允许在 super 构造函数调用之前初始化实例变量:

class StringWriterMarkupBuilder extends MarkupBuilder {
    final def sw = new StringWriter()
    StringWriterMarkupBuilder() {
        super(sw)
    }

    @Override String toString() {
        sw.toString()
    }
}

最佳答案

抱歉,我终于通过深入研究 MarkupBuilder 的 Groovy 源代码找到了解决方案!:

class StringWriterMarkupBuilder extends MarkupBuilder {
    StringWriterMarkupBuilder() {
        //MarkupBuilder.this(new IndentPrinter(new PrintWriter(writer)))
        super(new StringWriter()) 
    }

    @Override String toString() {
        //IndentPrinter.PrintWriter.StringWriter
        return super.getPrinter().out.out.toString()
    }
}

关于groovy - 如何制作 "StringWriterMarkupBuilder",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665478/

相关文章:

grails - Grails:将BufferedImage写入响应

compiler-construction - 如何缓存由 Groovy 脚本引擎生成的编译类?

grails - groovy.lang.MissingPropertyException:否这样的属性:为类创建:

Groovy 可选括号的使用

grails - 尝试使组具有在Grails中拥有自己的URL的能力。 (类似于您如何浏览至facebook.com/{username})

groovy - java.util.function.Predicate#and 和 Groovy 2.2 闭包

groovy - Artifactory + Custom Gradle插件编程

java - 如何在 groovy 中列出 JVM 中的所有(groovy)类

gradle - Gradle 3.4:使用ConfigSlurper构建配置文件

grails - grails 中的通用方法拦截(特别是 Controller )