반환 타입이 자신이 위치한 클래스의 타입과 다른 clone() 메서드를 보고합니다.

보통 clone() 메서드의 반환 타입은 java.lang.Object이며, 이는 클라이언트가 메서드를 사용하기 힘들게 만듭니다. Effective Java(2판 및 3판)에서는 clone() 메서드의 반환 타입을, 반환하는 객체의 클래스 타입과 같게 만들 것을 권장합니다.

예:


  class Foo implements Cloneable {
    public Object clone() {
      try {
        return super.clone();
      } catch (CloneNotSupportedException e) {
        throw new AssertionError();
      }
    }
  }

빠른 수정을 적용한 후:


  class Foo implements Cloneable {
    public Foo clone() {
      try {
        return (Foo)super.clone();
      } catch (CloneNotSupportedException e) {
        throw new AssertionError();
      }
    }
  }