我正在Android Studio上进行代码检查,并弹出以下警告
Probable bugs
@NotNull/@Nullable problems
Not annotated method overrides method annotated with @RecentlyNonNull
针对以下代码
@Override
public String toString() {
return title;
}
我以前见过@NonNull注释,这意味着返回值永远不能为null。但是@RecentlyNonNull是什么?我什么时候使用它?
,不提供任何解释。
皮棉推荐是在其中添加注释,但是它有什么作用?
答案 0 :(得分:9)
对于您的问题,我没有一个简单直接的答案,但我可能会给您一些指导。
请注意,the support
subpackage的SDK javadoc中没有此注释。
1)就生成的Javadoc而言,此存根注释意味着NonNull
是最近添加的。
您可以在Options
类源代码中找到信息:
"$ARG_DOC_STUBS ", "Generate documentation stub source files for the API. Documentation stub " + "files are similar to regular stub files, but there are some differences. For example, in " + "the stub files, we'll use special annotations like @RecentlyNonNull instead of @NonNull to " + "indicate that an element is recently marked as non null, whereas in the documentation stubs we'll " + "just list this as @NonNull...
这里有些注释不在支持库中, 例如
@RecentlyNullable
和@RecentlyNonNull
。这些被使用 仅在存根中自动将代码标记为最近注释 具有null / non-null。我们不希望这些注释出现在源代码中 码;最近度是在构建时计算的,并注入到 存根代替常规的空注释。
但是似乎它也可能在IDE警告/错误中使用。
2)根据此blog,此约束源自Kotlin支持,并允许编译器/ linter根据非null约束的最新程度来应用非null违例的严重性级别(最近:警告编译,不是最近的:错误编译):
通常,在Kotlin中违反可废止合同的行为会导致 编译错误。但是要确保新注释的API是 与您现有的代码兼容,我们正在使用一种内部机制 由Kotlin编译器团队提供,用于将API标记为最新 带注释的。最近注释的API仅会导致警告 而不是Kotlin编译器的错误。您将需要使用 Kotlin 1.2.60或更高版本。
我们的计划是产生新添加的可空性注释 仅警告,并将严重性级别提高到错误始于 次年的Android SDK。目标是为您提供 有足够的时间来更新您的代码。