⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumsetconverter.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
字号:
// ***** READ THIS *****// This class will only compile with JDK 1.5.0 or above as it test Java enums.// If you are using an earlier version of Java, just don't try to build this class. XStream should work fine without it.package com.thoughtworks.xstream.converters.enums;import com.thoughtworks.xstream.converters.Converter;import com.thoughtworks.xstream.converters.MarshallingContext;import com.thoughtworks.xstream.converters.UnmarshallingContext;import com.thoughtworks.xstream.io.HierarchicalStreamReader;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.mapper.Mapper;import com.thoughtworks.xstream.core.util.Fields;import java.lang.reflect.Field;import java.util.EnumSet;import java.util.Iterator;/** * Serializes a Java 5 EnumSet. * * @author Joe Walnes */public class EnumSetConverter implements Converter {    private final Field typeField;    private final Mapper mapper;    public EnumSetConverter(Mapper mapper) {        this.mapper = mapper;        typeField = Fields.find(EnumSet.class, "elementType");    }    public boolean canConvert(Class type) {        return EnumSet.class.isAssignableFrom(type);    }    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {        EnumSet set = (EnumSet) source;        Class enumTypeForSet = (Class) Fields.read(typeField, set);        writer.addAttribute(mapper.attributeForEnumType(), mapper.serializedClass(enumTypeForSet));        writer.setValue(joinEnumValues(set));    }    private String joinEnumValues(EnumSet set) {        boolean seenFirst = false;        StringBuffer result = new StringBuffer();        for (Iterator iterator = set.iterator(); iterator.hasNext();) {            Enum value = (Enum) iterator.next();            if (seenFirst) {                result.append(',');            } else {                seenFirst = true;            }            result.append(value.name());        }        return result.toString();    }    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {        Class enumTypeForSet = mapper.realClass(reader.getAttribute(mapper.attributeForEnumType()));        EnumSet set = EnumSet.noneOf(enumTypeForSet);        String[] enumValues = reader.getValue().split(",");        for (int i = 0; i < enumValues.length; i++) {            String enumValue = enumValues[i];            if(enumValue.length() > 0) {                set.add(Enum.valueOf(enumTypeForSet, enumValue));            }        }        return set;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -