package com.cheng.multithreadstudy.sunframework.proxy; import java.util.HashMap; import java.util.List; import java.util.Map; public class ModelMap { private Map map; private static String LIST = "list"; public ModelMap() { map = new HashMap(); } public <T> void put(GString<T> clazz, Object object) { if (object instanceof List) { Object object2 = map.get(LIST); if (object2 == null) { Map listMap = new HashMap<Object, List<T>>(); map.put(LIST, listMap); listMap.put(clazz, object); } else { Map listMap = (Map) object2; listMap.put(clazz, object); } } else { map.put(clazz, object); } } public <T> void put(GInteger<T> clazz, Object object) { if (object instanceof List) { Object object2 = map.get(LIST); if (object2 == null) { Map listMap = new HashMap<Object, List<T>>(); map.put(LIST, listMap); listMap.put(clazz, object); } else { Map listMap = (Map) object2; listMap.put(clazz, object); } } else { map.put(clazz, object); } } public <T> T get(GInteger<T> clazz) { return (T) map.remove(clazz); } public <T> List<T> getList(GInteger<T> clazz) { Object object = map.get(LIST); if (object == null) { return null; } else { Map listMap = (Map) object; return (List<T>) listMap.remove(clazz); } } public <T> List<T> getList(GString<T> clazz) { Object object = map.get(LIST); if (object == null) { return null; } else { Map listMap = (Map) object; return (List<T>) listMap.remove(clazz); } } public <T> T get(GString<T> clazz) { return (T) map.remove(clazz); } public <T> void put(String key, Object object) { put(new GString<T>(key), object); } public <T> void put(int key, Object object) { put(new GInteger<T>(key), object); } public <T> List<T> getList(String key) { return getList(new GString<T>(key)); } public <T> T get(String key) { return get(new GString<T>(key)); } public <T> List<T> getList(int key) { return getList(new GInteger<T>(key)); } public <T> T get(int key) { return get(new GInteger<T>(key)); } public void clear() { map.clear(); } public static class GInteger<E1> { private int mInteger; public GInteger(Integer integer) { this.mInteger = integer; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + mInteger; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GInteger<E1> other = (GInteger<E1>) obj; return mInteger == other.mInteger; } } public static class GString<E2> { private String mString; public GString(String string) { this.mString = string; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((mString == null) ? 0 : mString.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GString<E2> other = (GString<E2>) obj; if (mString == null) { if (other.mString != null) return false; } else if (!mString.equals(other.mString)) return false; return true; } } }