@SuppressWarnings与@SuppressLint

2022-09-02 21:49:21

任何人都可以向我解释和之间的区别吗?我们什么时候应该使用一个而不是另一个?@SuppressWarnings@SuppressLint

我已经阅读了文档,但仍然没有得到差异。使用示例/示例代码进行解释将不胜感激。谢谢。


答案 1

实际上有个lint:一个属于编译器,所以是特定于Java的,另一个属于Google并且是Android特定的。

如果您的警告是关于 Java 中不特定于 Android 的内容,则会使用 禁止显示,如果警告是特定于 Android 的,则会使用 .@SuppressWarnings@SuppressLint

安卓 Lint 警告

此处列出了 Lint 警告:http://tools.android.com/tips/lint-checks

因此,假设您有一个关于缺少权限的警告,并且警告说明以“此检查扫描您的代码和库并查看正在使用的 API,并根据访问这些 API 所需的权限集进行检查。在上面链接的 lint 警告页面中,我们发现:

缺少权限

摘要:缺少权限

优先级: 9 / 10 严重性: 错误 类别: 正确性

此检查将扫描您的代码和库,查看正在使用的 API,并根据访问这些 API 所需的权限集进行检查。如果在运行时调用使用这些 API 的代码,则程序将崩溃。

此外,对于可撤销的权限(使用 targetSdkVersion 23),还必须准备好客户端代码,以便在用户在运行时拒绝权限请求时处理引发异常的调用。

因此,为了抑制这一点,我们将此注释放在代码上:

@SuppressLint("MissingPermission")

编译器警告

假设我们发现了此警告:

“Unchecked cast: 'java.lang.Object' to 'java.lang.Integer' ...”

如果您在Android Studio的悬停弹出窗口中阅读此内容,则末尾有一个链接。单击该链接时,文本将展开,并在底部找到以下内容:More...More...

“提示:将 -Xlint:uncheck 传递给 javac 以获取更多详细信息。

这告诉您,您将在注释中使用“未选中”,如下所示:

@SuppressWarnings("unchecked")

有关编译器警告的列表,请运行 :javac -X

C:\>javac -X
  -Xlint                     Enable recommended warnings
  -Xlint:{all,auxiliaryclass,cast,classfile,deprecation,dep-ann,divzero,empty,fallthrough,finally,options,overloads,overrides,path,processing,rawtypes,serial,static,try,unchecked,varargs,-auxiliaryclass,-cast,-classfile,-deprecation,-dep-ann,-divzero,-empty,-fallthrough,-finally,-options,-overloads,-overrides,-path,-processing,-rawtypes,-serial,-static,-try,-unchecked,-varargs,none} Enable or disable specific warnings
  .
  .
  .

这些是可以在 中使用的值。@SuppressWarnings


答案 2

此外,还有(科特林。抑制),这会抑制 Android 警告以及 .@Suppress@SuppressLint

例如。@Suppress("AlwaysShowAction")


推荐