부모 메서드 호출 유도(@CallSuper)

Published: by

@CallSuper

@CallSuper 어노테이션은, 오버라이드 하는 메서드가 어노테이팅 한 메서드도 호출할 필요가 있다는 것을 알려준다.

즉, 슈퍼 클래스의 메서드에서 @CallSuper 어노테이션을 사용한다.

public class BaseViewHolder<T> extends RecyclerView.ViewHolder {

  public BaseViewHolder(View itemView) {
    super(itemView);
    ButterKnife.bind(this, itemView);
  }

  protected T data;

  @CallSuper // Here!!
  public void bind(T $data) {
    data = $data;
  }
}

자식 클래스에서, 부모 클래스에서 어노테이팅 한 메서드를 호출하지 않으면 컴파일 에러와 같은 표시를 볼 수 있다. 즉 bind 메서드에 빨간 밑줄이 나타난다. 그러나 빌드하는데는 문제없다.

public class MainViewHolder extends BaseViewHolder<JsonElement> {
  ...
  ...
  private MainViewHolder(View itemView) {
    super(itemView);
  }

  @Override public void bind(JsonElement $data) {
    super.bind($data); // super.bind(..)를 선언하지 않으면 bind에 컴파일와 같은 밑줄이 나타난다.
    ...
    ...
  }
}