android @nonnull的作用,@NonNull和@Nullable注释 – 它会影响Android的性能吗?
@NonNull和@Nullable注释会在运行时影响Android的性能吗?我的意思是他们只有支持LINT和其他工具来检测可能的错误的目的,所以他们可能/希望在编译期间被忽略.你有什么资料来证明这一点吗?解决方法:作为一个小实验,我在Android应用中创建了以下方法:private void test(@NonNull Object o) {o.toString();}编译项目,用ApkToo
@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
更多推荐
所有评论(0)