CloneNotSupportedException should extends RuntimeException not Exception

Remi Forax forax at univ-mlv.fr
Sun Oct 14 16:19:16 UTC 2012


Hi everybody,
CloneNotSupportedException is thrown when a developer calls 
Object.clone() and forget to mark the current object as Cloneable. 
Because it's clearly a developer error, CloneNotSupportedException 
should be a subtype of RuntimeException and not of Exception.

I believe this change is backward compatible because RuntimeException is 
a subclass of Exception,
so I propose to first change CloneNotSupportedException to extends 
RuntimeException.

diff -r ff641c5b329b 
src/share/classes/java/lang/CloneNotSupportedException.java
--- a/src/share/classes/java/lang/CloneNotSupportedException.java Sat 
Oct 13 10:15:57 2012 +0100
+++ b/src/share/classes/java/lang/CloneNotSupportedException.java Sun 
Oct 14 18:16:35 2012 +0200
@@ -42,7 +42,7 @@
   */

  public
-class CloneNotSupportedException extends Exception {
+class CloneNotSupportedException extends RuntimeException {
      private static final long serialVersionUID = 5195511250079656443L;

      /**


And then to clean up the whole JDK (in several patches) to remove all 
the unnecessary
try/catch like the one in by example ArrayList.clone()

     public Object clone() {
         try {
             ArrayList<?> v = (ArrayList<?>) super.clone();
             v.elementData = Arrays.copyOf(elementData, size);
             v.modCount = 0;
             return v;
         } catch (CloneNotSupportedException e) {
             // this shouldn't happen, since we are Cloneable
             throw new InternalError(e);
         }
     }

will become

     public Object clone() {
         ArrayList<?> v = (ArrayList<?>) super.clone();
         v.elementData = Arrays.copyOf(elementData, size);
         v.modCount = 0;
         return v;
     }


cheers,
Rémi




More information about the core-libs-dev mailing list