【问题标题】:@SuppressWarnings vs @SuppressLint@SuppressWarnings 与 @SuppressLint
【发布时间】:2016-10-19 08:54:56
【问题描述】:

谁能向我解释@SuppressWarnings@SuppressLint 之间的区别?我们什么时候应该使用一个而不是另一个?

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

【问题讨论】:

  • 除了 SuppressWarnings 适用于所有 java 和 SuppressLint 仅适用于 android 之外,我找不到其他区别
  • 这很简单。警告是由编译器生成的,而不是 lint 程序。例如,不推荐使用的代码警告来自编译器,因此您使用@SuppressWarnings 将其静音。一条消息,例如比您的 minSdkVersion 晚的 API 来自 lint,因此您使用 @SuppressLint
  • @krislarson 您是否有理由不将其发布为答案?这似乎完美地回答了这个问题
  • @BartekLipinski 不知道,也许我认为这个问题会被关闭,因为它不涉及实际代码。然而,在这个问题上有 5 个赞成票,一个正确的答案在这里似乎是合适的,所以我会继续补充。谢谢。

标签: java android android-studio


【解决方案1】:

实际上有两种 lint:一种属于编译器,因此是Java 特有的,一种属于Google 并且是Android 特有的。

如果您的警告是关于 Java 中并非特定于 Android 的某些内容,则会使用 @SuppressWarnings 抑制它,如果它是特定于 Android 的,则使用 @SuppressLint 抑制它。

Android Lint 警告

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

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

缺少权限

摘要:缺少权限

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

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

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

所以为了抑制这种情况,我们在代码上放了这个注解:

@SuppressLint("MissingPermission")

编译器警告

假设我们发现了这个警告:

“未经检查的强制转换:'java.lang.Object' 到 'java.lang.Integer' ...”

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

“提示:将 -Xlint:unchecked 传递给 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 中使用的值。

【讨论】:

  • 感谢这个非常有用的解释。对于像我这样仍然不确定什么是特定于 Android 和什么不是的人:事实证明,使用已弃用的 Android 类和方法不是是特定于 Android 的。使用@SuppressWarnings("deprecation") 抑制。
  • @LarsH 是的,这是因为 Google 使用通用 Java 注释将类/方法标记为已弃用。
【解决方案2】:

此外,还有 @Suppress (kotlin.Suppress) 和 @SuppressLint 可以抑制 Android 警告。

例如,@Suppress("AlwaysShowAction")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2011-03-31
    • 2021-06-29
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多