CloneNotSupportedException should extends RuntimeException not Exception

Remi Forax forax at
Mon Oct 15 17:08:47 UTC 2012

Hi Jeroen,

On 10/15/2012 01:48 PM, Jeroen Frijters wrote:
> The solution is actually pretty easy. Just deprecate Object.clone() and add a new method to Object:
> protected final native Object shallowClone();
> It doesn't require the useless Cloneable interface and doesn't conflate shallow and deep cloning.
> (This is similar to .NET's Object.MemberwiseClone().)
> Note that this means that any non-final class is cloneable, BUT THAT IS ALREADY THE  CASE even though some people want to pretend otherwise.

To avoid collisions it can be a static method of Object or j.u.Objects
that uses generics to be nicely typed.

static native <T> T shallowClone(T object);

and I disagree about Cloneable, while a non-final class is by definition 
mutable, it doesn't mean
that a non final class can be cloned because it may share some states 
that should not be shared,
at least without the consent from the author the class.

The other nice property is that any cloneable class will be publicly 

I also believe that the checkcast generated by javac before calling 
shallowClone can be removed
by the JIT, currently this cast is not removed when you call clone.

> Regards,
> Jeroen


More information about the core-libs-dev mailing list