Android 编译时注解 —— 语法详解

Android编译时注解语法及使用详解

SOURCE(源码时),CLASS(编译时),RUNTIME(运行时)

  • @Target 可以用来修饰哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等,未标注则表示可修饰所有

ANONOTATION_TYPE(注解类型声明),

PACKAGE(包)

TYPE (类,包括enum及接口,注解类型)

METHOD (方法)

CONSTRUCTOR (构造方法)

FIFLD (成员变量)

PARAMATER (参数)

LOCAL_VARIABLE (局部 变量)

  • @Inherited 是否可以被继承,默认为 false

需要注意的是注解是不可以继承的,@Inherited 的意思是 假如我们把注解应用到 A 类中,B 类继承 A ,那么 B 可以扫描到 A 的注解。

注解的继承”(依赖倒置?)

这里讲的继承并不是通过@Inherited修饰的注解。

这个“继承”是一个注解的使用技巧,使用上的感觉类似于依赖倒置,来自于ButterKnife源码。

先看代码。

@Target(METHOD)

@Retention(CLASS)

@ListenerClass(

targetType = “android.view.View”,

setter = “setOnClickListener”,

type = “butterknife.internal.DebouncingOnClickListener”,

method = @ListenerMethod(

name = “doClick”,

parameters = “android.view.View”

)

)

public @interface OnClick {

/** View IDs to which the method will be bound. */

int[] value() default { View.NO_ID };

}

这是ButterKnife的OnClick 注解。特殊的地方在于@OnClick修饰了注解@ListenerClass,并且设置了一些只属于@OnClick的属性。

那这样的作用是什么呢?

凡是修饰了@OnClick的地方,也就自动修饰了@ListenerClass。类似于@OnClick是@ListenerClass的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值