Я только что нашел любопытным, как моя студия andorid может уведомлять меня, когда в моем onCreate()
методе Activity, когда мне не удается вызвать super.onCreate()
, потом узнал, что Android (слишком умный) реализовал аннотацию CallSuper
чтобы убедиться, что переопределенный метод вызывает супер-метод.
Я просто вошел в CallSuper
, чтобы увидеть магию c того, что происходит внутри,
package androidx.annotation;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.CLASS;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Denotes that any overriding methods should invoke this method as well.
* <p>
* Example:
* <pre><code>
* @CallSuper
* public abstract void onFocusLost();
*
* / @Documented @Retention (КЛАСС) @Target ({METHOD}) publi c @interface CallSuper {}
Ссылка на исходный код: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/annotation/CallSuper.java Но, к моему удивлению, это ничего не дает. Где это оценивает метод против этой аннотации? Как компилятор может это сделать? Мне очень любопытно.