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

📄 implicitcollectionmapper.java

📁 xstream是一个把java object序列化成xml文件的开源库,轻便好用
💻 JAVA
字号:
package com.thoughtworks.xstream.mapper;import com.thoughtworks.xstream.alias.ClassMapper;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class ImplicitCollectionMapper extends MapperWrapper {    public ImplicitCollectionMapper(ClassMapper wrapped) {        super(wrapped);    }    // { definedIn (Class) -> (ImplicitCollectionMapperForClass) }    private Map classNameToMapper = Collections.synchronizedMap(new HashMap());    private ImplicitCollectionMapperForClass getMapper(Class definedIn) {        while (definedIn != null) {            ImplicitCollectionMapperForClass mapper = (ImplicitCollectionMapperForClass) classNameToMapper.get(definedIn);            if (mapper != null) {                return mapper;            }            definedIn = definedIn.getSuperclass();        }        return null;    }    private ImplicitCollectionMapperForClass getOrCreateMapper(Class definedIn) {        ImplicitCollectionMapperForClass mapper = getMapper(definedIn);        if (mapper == null) {            mapper = new ImplicitCollectionMapperForClass(definedIn);            classNameToMapper.put(definedIn, mapper);        }        return mapper;    }    public String getFieldNameForItemTypeAndName(Class definedIn, Class itemType, String itemFieldName) {        ImplicitCollectionMapperForClass mapper = getMapper(definedIn);        if (mapper != null) {            return mapper.getFieldNameForItemTypeAndName(itemType, itemFieldName);        } else {            return null;        }    }    public Class getItemTypeForItemFieldName(Class definedIn, String itemFieldName) {        ImplicitCollectionMapperForClass mapper = getMapper(definedIn);        if (mapper != null) {            return mapper.getItemTypeForItemFieldName(itemFieldName);        } else {            return null;        }    }    public ImplicitCollectionMapping getImplicitCollectionDefForFieldName(Class itemType, String fieldName) {        ImplicitCollectionMapperForClass mapper = getMapper(itemType);        if (mapper != null) {            return mapper.getImplicitCollectionDefForFieldName(fieldName);        } else {            return null;        }    }    public void add(Class definedIn, String fieldName, Class itemType) {        add(definedIn, fieldName, null, itemType);    }    public void add(Class definedIn, String fieldName, String itemFieldName, Class itemType) {        ImplicitCollectionMapperForClass mapper = getOrCreateMapper(definedIn);        mapper.add(new ImplicitCollectionMappingImpl(fieldName, itemType, itemFieldName));    }    private static class ImplicitCollectionMapperForClass {        //private Class definedIn;        private Map namedItemTypeToDef = new HashMap(); // { (NamedItemType) -> (ImplicitCollectionDefImpl) }        private Map itemFieldNameToDef = new HashMap(); // { itemFieldName (String) -> (ImplicitCollectionDefImpl) }        private Map fieldNameToDef = new HashMap(); // { fieldName (String) -> (ImplicitCollectionDefImpl) }        public ImplicitCollectionMapperForClass(Class definedIn) {            //this.definedIn = definedIn;        }        public String getFieldNameForItemTypeAndName(Class itemType, String itemFieldName) {            ImplicitCollectionMappingImpl unnamed = null;            for (Iterator iterator = namedItemTypeToDef.keySet().iterator(); iterator.hasNext();) {                NamedItemType itemTypeForFieldName = (NamedItemType) iterator.next();                if (itemTypeForFieldName.itemType.isAssignableFrom(itemType)) {                    ImplicitCollectionMappingImpl def = (ImplicitCollectionMappingImpl) namedItemTypeToDef.get(itemTypeForFieldName);                    if (def.getItemFieldName() != null) {                        if (def.getItemFieldName().equals(itemFieldName)) {                            return def.getFieldName();                        }                    } else {                        unnamed = def;                        if (itemFieldName == null) {                            break;                        }                    }                }            }            return unnamed != null ? unnamed.getFieldName() : null;        }        public Class getItemTypeForItemFieldName(String itemFieldName) {            ImplicitCollectionMappingImpl def = getImplicitCollectionDefByItemFieldName(itemFieldName);            if (def != null) {                return def.getItemType();            } else {                return null;            }        }        private ImplicitCollectionMappingImpl getImplicitCollectionDefByItemFieldName(String itemFieldName) {            if (itemFieldName == null) {                return null;            } else {                return (ImplicitCollectionMappingImpl) itemFieldNameToDef.get(itemFieldName);            }        }        public ImplicitCollectionMappingImpl getImplicitCollectionDefByFieldName(String fieldName) {            return (ImplicitCollectionMappingImpl) fieldNameToDef.get(fieldName);        }        public ImplicitCollectionMapping getImplicitCollectionDefForFieldName(String fieldName) {            return (ImplicitCollectionMapping) fieldNameToDef.get(fieldName);        }        public void add(ImplicitCollectionMappingImpl def) {            fieldNameToDef.put(def.getFieldName(), def);            namedItemTypeToDef.put(def.createNamedItemType(), def);            if (def.getItemFieldName() != null) {                itemFieldNameToDef.put(def.getItemFieldName(), def);            }        }    }    private static class ImplicitCollectionMappingImpl implements ImplicitCollectionMapping {        private String fieldName;        private String itemFieldName;        private Class itemType;        ImplicitCollectionMappingImpl(String fieldName, Class itemType, String itemFieldName) {            this.fieldName = fieldName;            this.itemFieldName = itemFieldName;            this.itemType = itemType;        }        public boolean equals(Object obj) {            if (obj instanceof ImplicitCollectionMappingImpl) {                ImplicitCollectionMappingImpl b = (ImplicitCollectionMappingImpl) obj;                return fieldName.equals(b.fieldName)                        && isEquals(itemFieldName, b.itemFieldName);            } else {                return false;            }        }        public NamedItemType createNamedItemType() {            return new NamedItemType(itemType, itemFieldName);        }        private static boolean isEquals(Object a, Object b) {            if (a == null) {                return b == null;            } else {                return a.equals(b);            }        }        public int hashCode() {            int hash = fieldName.hashCode();            if (itemFieldName != null) {                hash += itemFieldName.hashCode() << 7;            }            return hash;        }        public String getFieldName() {            return fieldName;        }        public String getItemFieldName() {            return itemFieldName;        }        public Class getItemType() {            return itemType;        }    }    private static class NamedItemType {        Class itemType;        String itemFieldName;        NamedItemType(Class itemType, String itemFieldName) {            this.itemType = itemType;            this.itemFieldName = itemFieldName;        }        public boolean equals(Object obj) {            if (obj instanceof NamedItemType) {                NamedItemType b = (NamedItemType) obj;                return itemType.equals(b.itemType)                        && isEquals(itemFieldName, b.itemFieldName);            } else {                return false;            }        }        private static boolean isEquals(Object a, Object b) {            if (a == null) {                return b == null;            } else {                return a.equals(b);            }        }        public int hashCode() {            int hash = itemType.hashCode() << 7;            if (itemFieldName != null) {                hash += itemFieldName.hashCode();            }            return hash;        }    }}

⌨️ 快捷键说明

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