前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Groovy】Json、Xml、Swing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)

【Groovy】Json、Xml、Swing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)

作者头像
韩曙亮
发布2023-03-30 11:13:17
1.1K0
发布2023-03-30 11:13:17
举报

文章目录

一、Json 生成器 JsonBuilder


JsonBuilder 原型如下 , 该类继承自 GroovyObjectSupport 类 , 其核心是 invokeMethod , 利用元编程实现 Json 生成器的作用 , 帮助生成 Json 字符串 ;

代码语言:javascript
复制
public class JsonBuilder extends GroovyObjectSupport implements Writable {
    public Object invokeMethod(String name, Object args) {
        if (args != null && Object[].class.isAssignableFrom(args.getClass())) {
            Object[] arr = (Object[]) args;
            if (arr.length == 0) {
                return setAndGetContent(name, new HashMap<String, Object>());
            } else if (arr.length == 1) {
                if (arr[0] instanceof Closure) {
                    return setAndGetContent(name, JsonDelegate.cloneDelegateAndGetContent((Closure) arr[0]));
                } else if (arr[0] instanceof Map) {
                    return setAndGetContent(name, arr[0]);
                }
            } else if (arr.length == 2)  {
                if (arr[0] instanceof Map && arr[1] instanceof Closure) {
                    Map subMap = new LinkedHashMap();
                    subMap.putAll((Map) arr[0]);
                    subMap.putAll(JsonDelegate.cloneDelegateAndGetContent((Closure) arr[1]));

                    return setAndGetContent(name, subMap);
                } else if (arr[0] instanceof Collection && arr[1] instanceof Closure) {
                    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
                    for (Object it : (Collection) arr[0]) {
                        list.add(JsonDelegate.curryDelegateAndGetContent((Closure) arr[1], it));
                    }

                    return setAndGetContent(name, list);
                }
            }

            throw new JsonException("Expected no arguments, a single map, a single closure, or a map and closure as arguments.");
        } else {
            return setAndGetContent(name, new HashMap<String, Object>());
        }
    }
}

二、Xml 生成器 MarkupBuilder


MarkupBuilder 继承了 BuilderSupport 类 , 其原型如下 , 其中封装了一系列的方法 , 帮助生成 Xml 文件 ;

代码语言:javascript
复制
public class MarkupBuilder extends BuilderSupport {

}

三、Swing 生成器 SwingBuilder


Swing 生成器 SwingBuilder , 继承 FactoryBuilderSupport 类 ;

代码语言:javascript
复制
public class SwingBuilder extends FactoryBuilderSupport {
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Json 生成器 JsonBuilder
  • 二、Xml 生成器 MarkupBuilder
  • 三、Swing 生成器 SwingBuilder
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档