GroovyJsonXmlSwing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GroovyJsonXmlSwing 生成器 ( 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<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 文件 ;
public class MarkupBuilder extends BuilderSupport
三、Swing 生成器 SwingBuilder
Swing 生成器 SwingBuilder , 继承 FactoryBuilderSupport 类 ;
public class SwingBuilder extends FactoryBuilderSupport
以上是关于GroovyJsonXmlSwing 生成器 ( Json 生成器 JsonBuilder | Xml 生成器 MarkupBuilder | Swing 生成器 SwingBuilder)的主要内容,如果未能解决你的问题,请参考以下文章