CallSuper注释如何评估重写的方法是否正在调用超级方法



我只是觉得很好奇,当我在活动的onCreate()方法中调用super.onCreate()失败时,我的andoid工作室是如何通知我的,然后我知道Android(太聪明了(实现了注释CallSuper,以确保被覆盖的方法正在调用超级方法。

我刚刚进入CallSuper,看看内部发生的事情的魔力,

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>
*  &#64;CallSuper
*  public abstract void onFocusLost();
* </code></pre>
*/
@Documented
@Retention(CLASS)
@Target({METHOD})
public @interface CallSuper {
}

源代码参考:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/annotation/CallSuper.java但令我惊讶的是,它什么都没做。它在哪里根据此注释评估方法?编译器是如何做到这一点的?我很好奇。

它通过绑定到android开发工具中的lint规则工作。

不仅仅是@CallSuper注释单独起作用。注释作为附带lint规则的标识符。检查CallSuperDetector的来源。

最新更新