CloneNotSupportedException should extends RuntimeException not Exception

David Holmes david.holmes at oracle.com
Sun Oct 14 22:34:32 UTC 2012


Remi,

This ship has sailed you can't recall it. CloneNotSupportedException is 
a checked exception and needs to remain so for source and binary 
compatibility.

David

On 15/10/2012 2:19 AM, Remi Forax wrote:
> 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