Java注解详解

Java中的注解

1.什么是注解

1.1注解

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK5.0及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

1.2注解的作用

①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
③编译检查:通过代码里标识的元数据让编译器能过实现基本的编译检查【Override】

2.基本内置注解

@Override
作用:通过代码里标识的元数据让编译器能过实现基本的编译检查
@Deprecated
作用:是对不应该再使用的方法添加注解,当编程人员使用这些方法时, 将会在编译时显示提示信息
@SuppressWarnings
其参数有:
deprecation,使用了过时的类或方法时的警告
unchecked,执行了未检查的转换时的警告
fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path,在类路径、源文件路径等中有不存在的路径时的警告
serial,当在可序列化的类上缺少serialVersionUID 定义时的警告
finally ,任何 finally 子句不能正常完成时的警告
all,关于以上所有情况的警告

3.自定义注解

它类似于新创建一个接口类文件,但为了区分,我们需要将它声明为@interface

  • 定义一个注解的方式:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {

 }
  • Java中提供了四种元注解,专门负责注解其他的注解
    @Retention元注解
    表示需要在什么级别保存该注释信息(生命周期)
    可选的RetentionPoicy参数包括:
    RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
    RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
    RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息

  • @Target元注解,默认值为任何元素,表示该注解用于什么地方。
    可用的ElementType参数包括
    ElementType.CONSTRUCTOR: 构造器声明
    ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
    ElementType.LOCAL_VARIABLE: 局部变量声明
    ElementType.METHOD: 方法声明
    ElementType.PACKAGE: 包声明
    ElementType.PARAMETER: 参数声明
    ElementType.TYPE: 类、接口(包括注解类型)或enum声明

  • @Documented将注解包含在JavaDoc中

  • @Inheried允许子类继承父类中的注解

4.注解详细图

注解分类图

5.android中的常用注解

Android Support 包之一的 support-annotations 是通过静态编译检测来提高代码质量的一个注解工具。

  • 在 Gradle 中通过如下声明来使用该注解包:
dependencies {
compile ‘com.android.support:support-annotations:22.2.0′
}

参数检测类型:

@Nullable  一个变量、参数或者函数返回值可以为NULL
@NonNull   一个变量、参数或者函数返回值不可以为NULL

资源类型

@AnimatorRes 表明该参数、变量或者函数返回值应该是一个 Animator 类型的资源
@AnimRes 表明该参数、变量或者函数返回值应该是一个 Anim 类型的资源
@AnyRes 表明该参数、变量或者函数返回值应该是一个任意类型的资源
@ArrayRes 表明该参数、变量或者函数返回值应该是一个 Array 类型的资源
@AttrRes 表明该参数、变量或者函数返回值应该是一个 attribute 类型的资源
@BoolRes 表明该参数、变量或者函数返回值应该是一个布尔类型的资源
@ColorInt 表明该参数、变量或者函数返回值应该是一个颜色值而不是颜色资源引用,例如应该是一个 AARRGGBB 的整数值。
@ColorRes 表明该参数、变量或者函数返回值应该是一个 color 类型的资源,而不是颜色值。注意和 ColorInt 区别
@DimenRes 表明该参数、变量或者函数返回值应该是一个 dimension 类型的资源
@DrawableRes 表明该参数、变量或者函数返回值应该是一个 drawable 类型的资源
@FractionRes 表明该参数、变量或者函数返回值应该是一个 fraction 类型的资源
@IdRes 表明该参数、变量或者函数返回值应该是一个资源的 ID 类型
@IntegerRes 表明该参数、变量或者函数返回值应该是一个整数类型的资源
@InterpolatorRes 表明该参数、变量或者函数返回值应该是一个 interpolator 类型的资源
@LayoutRes 表明该参数、变量或者函数返回值应该是一个 layout 布局文件类型的资源
@MenuRes 表明该参数、变量或者函数返回值应该是一个 menu 类型的资源
@PluralsRes 表明该参数、变量或者函数返回值应该是一个 plurals 类型的资源
@RawRes 表明该参数、变量或者函数返回值应该是一个 raw 类型的资源
@StringRes 表明该参数、变量或者函数返回值应该是一个字符串类型的资源
@StyleableRes 表明该参数、变量或者函数返回值应该是一个 styleable 类型的资源
@StyleRes 表明该参数、变量或者函数返回值应该是一个 style 类型的资源
@TransitionRes 表明该参数、变量或者函数返回值应该是一个 transition 类型的资源
@XmlRes 表明该参数、变量或者函数返回值应该是一个 XML 类型的资源

线程注解类型

@UiThread 表明函数在主线程中
@MainThread 表明函数在主线程中
@WorkerThread 表明函数在工作程中
@BinderThread 表明函数在绑定线程中程中

权限注解类型

@RequiresPermission 用来表明该函数执行需要一个或者多个权限,如果你没有声明这些权限,则会给出警告
//如果只要满足多个权限中的一个,用 anyOf ; 如果要满足多个权限,用 allOf 
@RequiresPermission(anyOf = {
Manifest.permission.READ_HISTORY_BOOKMARKS,
Manifest.permission.WRITE_HISTORY_BOOKMARKS})
public static final void updateHistory(ContentResolver cr, String url, boolean real) {
}

返回值是否使用检测注解

@CheckResults 用来检测函数的返回值是否被使用了,如果没有使用则说明可能不应该调用这个函数,可以给出建议使用哪个函数。

调用 super 函数的注解

@CallSuper 来表明重写这个函数需要调用 super 父函数。

数值常量注解

@IntRange 是用来表明整数型参数的取值范围的

 //setAlpha 函数的参数 alpha 的取值范围应该为 0 到 255,其他值都是非法的;
public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }

@FloatRange 同样是表明浮点数范围的

public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {…}

@Size 是用来表明数组类型参数的长度的

可以用 @Size(min=1) 来指定数组的最小长度,@Size(2) 则表明该数组参数必须是2.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值