CSR :
|
|
Relates :
|
|
Relates :
|
Summary ------- Update `Reference::clone` to always throw `CloneNotSupportedException`. Problem ------- The semantics of cloning a reference object (any instance of `java.lang.ref.Reference`) are not clearly defined. In addition, it is questionable whether cloning should be supported due to its tight interaction with garbage collector. The reachability state of a reference object may change during GC reference processing. The reference object may have been cleared when it reaches its reachability state. On the other hand, it may be enqueued or pending for enqueuing. A newly cloned reference object could have a referent that is unreachable if the reference object being cloned is not yet cleared. A newly cloned reference object from an enqueued reference object will never be enqueued. A reference object cannot be meaningfully cloned. Solution -------- Update `Reference::clone` to always throw `CloneNotSupportedException`. To clone a reference object, user code should create a new reference object with a constructor. Specification ------------- ``` + /** + * Throws {@link CloneNotSupportedException}. A {@code Reference} cannot be + * meaningfully cloned. Construct a new {@code Reference} instead. + * + * @apiNote This method is defined in Java SE 8 Maintenance Release 4. + * + * @return never returns normally + * @throws CloneNotSupportedException always + * + * @since 8 + */ + @Override + protected Object clone() throws CloneNotSupportedException { + throw new CloneNotSupportedException(); + } ```
|