public static Map<?, ?> cloneElements(Map<?, ?> col) throws CloneNotSupportedException { Map<Object, Object> colClone; if (col instanceof TreeMap<?,?>) colClone = new TreeMap<Object, Object>(); else if (col instanceof Map<?,?>) colClone = new LinkedHashMap<Object, Object>(); else throw new CloneNotSupportedException(); for (Map.Entry<?, ?> entry : col.entrySet()) colClone.put(cloneObject(entry.getKey()), cloneObject(entry.getValue())); return colClone; } /*
public static Collection<?> cloneElements(Collection<?> col) throws CloneNotSupportedException { Collection<Object> colClone; if (col instanceof List<?>) colClone = new ArrayList<Object>(col.size()); else if (col instanceof LinkedHashSet<?>) colClone = new LinkedHashSet<Object>(col.size()); else if (col instanceof HashSet<?>) colClone = new HashSet<Object>(col.size()); else if (col instanceof TreeSet<?>) colClone = new TreeSet<Object>(); else if (col instanceof Set<?>) colClone = new LinkedHashSet<Object>(col.size()); else throw new CloneNotSupportedException(); for (Object o : col) { o = cloneObject(o); colClone.add(o); } return colClone; }
clonedValue = value; else clonedValue = cloneObject(value); p.setter.invoke(clone, clonedValue);
protected static Object cloneObject(Object value) throws CloneNotSupportedException { if (value == null) return null; Class<?> type = value.getClass(); if (Element.class.isAssignableFrom(type)) return ((Element)value).clone(); else if (EnumSet.class.isAssignableFrom(type)) return ((EnumSet<?>)value).clone(); else if (Collection.class.isAssignableFrom(type)) return cloneElements((Collection<?>) value); else if (Map.class.isAssignableFrom(type)) return cloneElements((Map<?, ?>) value); else if (Pair.class.isAssignableFrom(type)) { Pair<?, ?> pair = (Pair<?, ?>)value; return new Pair<Object, Object>(cloneObject(pair.getFirst()), cloneObject(pair.getSecond())); } //else if (value instanceof String || type.isPrimitive()) return value; //throw new CloneNotSupportedException(); } public static Collection<?> cloneElements(Collection<?> col) throws CloneNotSupportedException {