@SuppressWarnings vs @SuppressLint

use*_*125 13 java android android-studio

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

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

kri*_*son 11

实际上有两个 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")
Run Code Online (Sandbox Code Playgroud)

编译器警告

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

"未经检查的强制转换:'java.lang.Object'为'java.lang.Integer'......"

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

"提示:传递-Xlint:取消选中javac来获取更多细节."

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

@SuppressWarnings("unchecked")
Run Code Online (Sandbox Code Playgroud)

有关编译器警告的列表,请运行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
  .
  .
  .
Run Code Online (Sandbox Code Playgroud)

这些是您可以使用的值@SuppressWarnings.