1

public abstract class ID implements java.io.Serializable {

    private static final Map<ID, WeakReference<ID>> interned = new WeakHashMap<ID, WeakReference<ID>>(1000);

    public static final String URIEncodingName = "urn";

    public static final String URNNamespace = "jxta";

    public static final ID nullID = (new NullID()).intern();

    public static ID create(URI fromURI) {

        try {

            return IDFactory.fromURI(fromURI);

        } catch (URISyntaxException badid) {

            IllegalArgumentException failure = new IllegalArgumentException();

 

            failure.initCause(badid);

            throw failure;

        }

    }

    protected ID() {}

    private Object readResolve() throws ObjectStreamException {

        return intern();

    }

    public abstract String getIDFormat();

    public abstract Object getUniqueValue();

    protected ID intern() {

        synchronized (ID.class) {

            Reference<ID> common = interned.get(this);

            

            ID result = null;

            

            if (null != common) {

                result = common.get();

            }

            

            if (null == result) {

                interned.put(this, new WeakReference<ID>(this));

                result = this;

            }

            

            return result;

        }

    }

    public URI toURI() {

        return URI.create(URIEncodingName + ":" + URNNamespace + ":" + getUniqueValue());

    }

}

}


Rand Posts:

相关日志

本文地址 : http://www.antigamez.com/articles/1.html
如果你对本文感兴趣,欢迎订阅我的博客

One Response so far

You can leave a response or Trackback this entry .
  1. sun Says:

    这是备忘?!
    这个标题=。=!

    [回复]

Leave a Reply