부모 메서드 호출 유도(@CallSuper)
@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에 컴파일와 같은 밑줄이 나타난다.
...
...
}
}