我只是觉得很好奇,当我在活动的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>
* @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
的来源。