常见的几个注解
1、@TargetApi
2、@RequiresApi
3、@suppressLint
4、@SuppressWarnings
我们在开发Android中常常会遇到代码提示异常,使用快捷键操作后,开发工具会自动给我们的代码添加一些注解,那么你真的了解这些注解吗?下面我们对每个注解的解释:
@TargetApi(Build.VERSION_CODES.*)或者@TargetApi(*)
Lint会按照API版本M以上扫描代码,而不是project中指定的minSDKVersion,可以使得高版本Api在低版本SDK上Lint不报错。
如果只加这个注解,表明这段代码只能在指定版本及以上的系统上运行,如果你运行在23以下的系统上,会出现异常!因为已经开发工具已经给予警告了,只是我们加了注解,警告被忽略了。
@RequiresApi(api = *)
从官方的表述可以看出更推荐使用RequiresApi替换TargetApi。
该注解表示注解目标只能够在指定的版本API及以上运行,消除高版本Api在低版本SDK上的报错,作用上和TargetApi相同,只是在词面上更清楚表达了这是一个建议,而不仅仅是为了消除高版本Api在低版本SDK上的报错。
@SuppressLint("NewApi")
一般不建议使用!最直接暴力屏蔽指定名称的报错,NewApi:Calling new methods on older versions。
在XML中类似的做法有:
<!--忽略XML中的两个警告。-->
tools:ignore="ScrollViewCount,UselessParent"
相比于@TargetApi指定了版本号,SuppressLint是一律屏蔽。当然还可以指定任何其他Lint定义好的错误名称。在settings中查找Inspections可以找到预先定义好的所有Error、Warning。对于多个错误,使用逗号隔开。
@SuppressWarnings("")
常用取值:unchecked //未检查的转化,如集合没有指定类型
unused //未使用的变量
resource //有泛型未指定类型
path //在类路径,原文件路径中有不存在的路径
deprecation //使用了某些不赞成使用的类和方法
fallthrough //switch语句执行到底没有break关键字
serial //某类实现Serializable 但是没有定义serialVersionUID 这个需要但是不必须的字段
rawtypes //没有传递带有泛型的参数
all //全部类型的警告
注解可以使用在许多地方,如:class、method、statement,分别对应由大到小不同的作用域类、方法、语句,作用域范围越大,那么性能损耗自然越大。
以上是针对我们日常开发中常用的注解的解释,特记录供自己学习!