常见的几个注解

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,分别对应由大到小不同的作用域类、方法、语句,作用域范围越大,那么性能损耗自然越大。

 以上是针对我们日常开发中常用的注解的解释