package java.lang.ref;

import ej.annotation.Nullable;

/**
 * Weak reference objects, which do not prevent their referents from being made finalizable,
 * finalized, and then reclaimed. Weak references are most often used to implement canonicalizing
 * mappings.
 *
 * <p>
 * Suppose that the garbage collector determines at a certain point in time that an object is weakly
 * reachable. At that time it will atomically clear all weak references to that object and all weak
 * references to any other weakly-reachable objects from which that object is reachable through a
 * chain of strong and soft references. At the same time it will declare all of the formerly
 * weakly-reachable objects to be finalizable. At the same time or at some later time it will
 * enqueue those newly-cleared weak references that are registered with reference queues.
 * 
 * @param <T> the type of the referenced object
 *
 */
public class WeakReference<T> extends Reference<T> {

	/**
	 * Creates a new weak reference that refers to the given object. The new reference is not registered
	 * with any queue.
	 *
	 * @param referent
	 *        object the new weak reference will refer to
	 */
	public WeakReference(T referent) {
		throw new RuntimeException();
	}

	/**
	 * Creates a new weak reference that refers to the given object and is registered with the given
	 * queue.
	 *
	 * @param referent
	 *        object the new weak reference will refer to
	 * @param q
	 *        the queue with which the reference is to be registered, or <code>null</code> if registration
	 *        is not required
	 */
	public WeakReference(T referent, @Nullable ReferenceQueue<? super T> q) {
		throw new RuntimeException();
	}
}