首页 > 解决方案 > CallSuper 注释如何评估被覆盖的方法是否正在调用超级方法?

问题描述

我只是好奇我的 andorid 工作室如何能够在我onCreate()的 Activity 方法中当我调用失败时通知我,super.onCreate()然后才知道 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 但令我惊讶的是它什么也没做。它在哪里根据这个注释评估方法?编译器如何能够做到这一点?我很好奇。

标签: androidandroid-support-libraryandroidx

解决方案


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

不仅仅是@CallSuper 注释单独起作用。注释用作随附 lint 规则的标识符。查看CallSuperDetector.


推荐阅读