@SuppressWarnings vs @SuppressLint

时间:2016-10-19 08:54:57

标签: java android android-studio

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

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

2 个答案:

答案 0 :(得分:10)

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

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

Android Lint警告

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

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

  

MissingPermission

     

摘要:遗漏权限

     

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

     

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

     

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

所以为了抑制这个,我们把这个注释放在代码上:

@SuppressLint("MissingPermission")

编译器警告

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

“未经检查的演员:'java.lang.Object'到'java.lang.Integer'......”

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

“提示:传递-Xlint:取消选中javac以获取更多详细信息。”

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

@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中使用的值。

答案 1 :(得分:0)

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

例如@Suppress("AlwaysShowAction")