On 05.12.15 21:23, Peter Levart wrote:
Digging up the src.jar of JDK 1.2.2, here's what the constructor of
PhantomReference looked like:

     /**
      * Creates a new phantom reference that refers to the given object and
      * is registered with the given queue.
      *
      * @throws  NullPointerException  If the <code>queue</code> argument
      *                                is <code>null</code>
      */
     public PhantomReference(Object referent, ReferenceQueue q) {
         super(referent, q);
     }


...so it seems Mark wanted PhantomReference constructor to throw NPE.
But implementation did not do that (here's also the constructor of
Reference):


     Reference(Object referent, ReferenceQueue queue) {
         this.referent = referent;
         if (referent == null) {
             /* Immediately make this instance inactive */
             this.queue = ReferenceQueue.NULL;
             this.next = this;
         } else {
             this.queue = (queue == null) ? ReferenceQueue.NULL : queue;
             this.next = null;
         }
     }


...and so the spec. has probably been modified to follow the standing
behavior.

Looks like it was updated in jdk5:
https://bugs.openjdk.java.net/browse/JDK-4239039


--
Best regards, Sergey.

Reply via email to