1 52 53 package com.go.teaservlet.util; 54 55 import java.util.*; 56 import java.lang.ref.WeakReference ; 57 import com.go.trove.util.IdentityMap; 58 59 89 public class ObjectIdentifier { 90 private static ObjectIdentifier cObjectIdentifer = new ObjectIdentifier(); 91 92 95 public static String identify(Object obj) { 96 return cObjectIdentifer.getIdentifer(obj); 97 } 98 99 106 public static Object retrieve(String identifier) { 107 return cObjectIdentifer.getObject(identifier); 108 } 109 110 private Map mIdentifiers; 112 113 private Map mObjects; 115 116 private Random mRandom; 117 118 private ObjectIdentifier() { 119 mIdentifiers = new IdentityMap(); 120 mObjects = new WeakHashMap(); 121 mRandom = new Random(); 122 } 123 124 private synchronized String getIdentifer(Object obj) { 125 String id = (String )mIdentifiers.get(obj); 126 127 if (id == null) { 128 do { 129 id = Long.toString(mRandom.nextLong() & Long.MAX_VALUE, 36); 130 } while (mObjects.containsKey(id)); 131 132 mIdentifiers.put(obj, id); 133 mObjects.put(id, new WeakReference (obj)); 134 } 135 136 return id; 137 } 138 139 private synchronized Object getObject(String identifier) { 140 WeakReference ref = (WeakReference )mObjects.get(identifier); 141 return (ref == null) ? null : ref.get(); 142 } 143 } 144 | Popular Tags |