티스토리 뷰


java.lang.CloneNotSupportedException 에러 해결 방법

오늘은 CloneNotSupportedException 에러 해결 방법을 알아보자. 사실 업무 하면서 CloneNotSupportedException를 만나기란 쉽지 않다. 거의 대부분의 개발 작업을 프레임워크와 라이브러리 기반에서 하다보니 만나기 어렵겠다. 

 

혹시 빠른 해결방법을 원한다면 스크롤 쭉 내리면 되겠다.

 

Exception에 대한 원인을 살펴보기 위해서는 java api document를 살펴보는게 좋다. 구글에 대고 치면 항상 링크가 나온다. "java api doc" , 혹은 "CloneNotSupportedException api doc" 등등 

 

API 상에서 나타내는 원인을 살펴보자.

원문 ) Thrown to indicate that the clone method in class Object has been called to clone an object, but that the object's class does not implement the Cloneable interface.

Applications that override the clone method can also throw this exception to indicate that an object could not or should not be cloned.

번역 ) Object 클래스의 clone 메소드가 오브젝트를 복제하기 위해 호출되었지만 오브젝트의 클래스가 Cloneable 인터페이스를 구현하지 않음을 표시하기 위해 발생합니다. clone 메서드를 재정의하는 응용 프로그램은이 예외를 발생시켜 개체를 복제 할 수 없거나 복제 할 수 없음을 나타냅니다.

쉽게 얘기해서 clone(); 을 호출한 클래스가 Cloneable를 implemets  하지 않았단 얘기다.  일부러 CloneNotSupportedException를 발생시키는 코드를 만들어보자.

 

public class test {
	public static void main(String[] args) throws Throwable {
		test3 t3 = new test3();
		Object clone = t3.clone();
	}
}

class test3{
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}	
}

에러내용 :

Exception in thread "main" java.lang.CloneNotSupportedException: test.test3
at java.lang.Object.clone(Native Method)
at test.test3.clone(test.java:14)
at test.test.main(test.java:6)

 

package test;

public class test {
	public static void main(String[] args) throws Throwable {
		test3 t3 = new test3();
		Object clone = t3.clone();
	}
}

class test3 implements Cloneable{
	@Override
	protected Object clone() throws CloneNotSupportedException {
		// TODO Auto-generated method stub
		return super.clone();
	}	
}

 

혹시라도 이 에러를 만난다면 clone(); 을 호출한 객체에 implements Cloneable가 되지 않았단 얘기니까 implements Cloneable를 붙여주도록 하자.


댓글
최근에 올라온 글
최근에 달린 댓글