@NonNull和@Nullable注释会在运行时影响Android的性能吗?我的意思是他们只有支持LINT和其他工具来检测可能的错误的目的,所以他们可能/希望在编译期间被忽略.你有什么资料来证明这一点吗?

解决方法:

作为一个小实验,我在Android应用中创建了以下方法:

private void test(@NonNull Object o) {

o.toString();

}

编译项目,用ApkTool“解压缩”它并查看了smali文件:

.method private test(Ljava/lang/Object;)V

.locals 0

.param p1, "o" # Ljava/lang/Object;

.annotation build Landroid/support/annotation/NonNull;

.end annotation

.end param

.prologue

.line 22

invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String;

.line 23

return-void

.end method

因此,Nonnull注释实际上并未在编译时从代码中删除.

我可以关闭Android studio中的检查,调用带有null作为参数的test-method并编译应用程序.然后它在o.toString()处遇到NullPointerExeption崩溃,但是没有提示VM实际上使用注释在运行时检查参数.正是拉尔托在他的回答中所说的.

我确实想知道VM是否能够这样做并且在使用null参数调用方法时抛出异常.

标签:android,annotations

来源: https://codeday.me/bug/20190528/1168744.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐