📄 referencebyidmarshaller.java
字号:
package com.thoughtworks.xstream.core;import com.thoughtworks.xstream.alias.ClassMapper;import com.thoughtworks.xstream.converters.Converter;import com.thoughtworks.xstream.converters.ConverterLookup;import com.thoughtworks.xstream.core.util.ObjectIdDictionary;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;public class ReferenceByIdMarshaller extends TreeMarshaller { private ObjectIdDictionary references = new ObjectIdDictionary(); private IDGenerator idGenerator; public static interface IDGenerator { String next(); } public ReferenceByIdMarshaller(HierarchicalStreamWriter writer, ConverterLookup converterLookup, ClassMapper classMapper, IDGenerator idGenerator) { super(writer, converterLookup, classMapper); this.idGenerator = idGenerator; } public ReferenceByIdMarshaller(HierarchicalStreamWriter writer, ConverterLookup converterLookup, ClassMapper classMapper) { this(writer, converterLookup, classMapper, new SequenceGenerator(1)); } public void convertAnother(Object item) { Converter converter = converterLookup.lookupConverterForType(item.getClass()); if (classMapper.isImmutableValueType(item.getClass())) { // strings, ints, dates, etc... don't bother using references. converter.marshal(item, writer, this); } else { Object idOfExistingReference = references.lookupId(item); if (idOfExistingReference != null) { writer.addAttribute("reference", idOfExistingReference.toString()); } else { String newId = idGenerator.next(); writer.addAttribute("id", newId); references.associateId(item, newId); converter.marshal(item, writer, this); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -