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

2023-03-30 11:13:17 浏览数 (2)

文章目录

  • 一、Json 生成器 JsonBuilder
  • 二、Xml 生成器 MarkupBuilder
  • 三、Swing 生成器 SwingBuilder

一、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 {
}

0 人点赞