android - 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>
* @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
.
推荐阅读
- python - 使用瓶子下载文件?
- android - Listview 未根据 Array Adapter 上的值进行更新
- functional-programming - 如何加入像 JavaScript 的解构这样的数组?
- postgresql - 如果在postgresql中的for循环里面
- c - 我们应该叫它C17还是C18?
- c# - Linq 加入列表
- php - 将条纹按钮文本“支付”更改为其他文本
- javascript - 如果使用了 preventDefault,如何让 Vue 查看输入元素的变化?
- javascript - 使用 pushState 更改 url。如何直接导航到确切的位置?
- php - 如何使用两个foreach在数据库中插入数据