任何人都可以向我解释@SuppressWarnings
和@SuppressLint
之间的区别吗?什么时候应该使用另一个?
我已经阅读了文档,但仍然没有得到差异。使用示例/示例代码进行解释将非常感激。感谢。
答案 0 :(得分:10)
实际上有两个 lints:一个属于编译器,因此是特定于Java的,一个属于Google并且是特定于Android的。
如果您的警告是关于Java中并非特定于Android的某些内容,则会使用@SuppressWarnings
来抑制它,如果它是特定于Android的,则会被@SuppressLint
抑制。
此处列出了提示警告: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")
。