重寫HashMap

package gov.gfmis.fap.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Element;

/**
 * xml對象模型
 *             /屬性(值對模式保存)
 *             
 *       XMLData  -父子結構則遞歸保存XMLData      
 *                   /單個要素節點則存放屬性XMLData     
 *             \子節點
 *                   \多個相同要素節點則存放List
 * 使用這種模式應避免讓元素名和屬性名相同
 * eg:
 *                                           
 *   
   
   
   
   
     /XMLData aa --XMLData bb * /List aa * 
          ------>XMLData data        \XMLData aa
 *   
   
   
   
                            \XMLData cc
 *   
   
   
   
   
 * 
 * @version 1.0
 * @author victor
 * @see XMLObjectVisitor#visit(Element)
 * @see XMLObjectVisitor#visit(Attribute)
 * @since java 1.4.1
 */
public class XMLData extends HashMap 
{
	private static final long serialVersionUID = 100000000000000L;
	/**
	 * 重載Map的put方法,實現個性化需求
	 * @param childName 對象名
	 * @param child 對象
	 * @return 原值對象,若不存在則爲null
	 */
	public Object put(Object childName,Object child)
	{
		return this.addObject(this,(String)childName,child);
	}
	/**
	 * 根據對象名,將對象保存在父對象中,覆蓋原同名對象
	 * @param parent 父Map對象
	 * @param child 子Map對象
	 * @param childName 子對象名稱
	 * @return 原值對象,若不存在則爲null
	 */
	private Object addObject(XMLData parent,String childName,Object child)
	{
		Object oldObj = parent.get(childName);
		if(parent.get(childName) == null)
		{
			super.put(childName,child);
		}
		else if(parent.get(childName) instanceof Map)
		{
			List list = new ArrayList();
			list.add(parent.get(childName));
			list.add(child);
			super.put(childName,list);
		}
		else if(parent.get(childName) instanceof List)
		{
			List ls = (List)parent.get(childName);
			ls.add(child);
		}
		else super.put(childName,child);
		
		return oldObj;
	}
}

別人重寫的HashMap,做參考。java

相關文章
相關標籤/搜索