您当前的位置: 首页 >  ar

韩曙亮

暂无认证

  • 0浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

韩曙亮 发布时间:2022-02-10 08:26:06 ,浏览量:0

文章目录
  • 一、Json 生成器 JsonBuilder
  • 二、Xml 生成器 MarkupBuilder
  • 三、Swing 生成器 SwingBuilder

一、Json 生成器 JsonBuilder

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

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());
            } 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 list = new ArrayList();
                    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());
        }
    }
}
二、Xml 生成器 MarkupBuilder

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

public class MarkupBuilder extends BuilderSupport {

}
三、Swing 生成器 SwingBuilder

Swing 生成器 SwingBuilder , 继承 FactoryBuilderSupport 类 ;

public class SwingBuilder extends FactoryBuilderSupport {
}
关注
打赏
1663594092
查看更多评论
立即登录/注册

微信扫码登录

0.0436s