安卓进阶指南Annotation自定义运行时注解(三)

在了解自定义注解前,我们需要搞懂元注解 的概念,这个在总结篇中已经说明。

代码地址:[android-annotation-tutorial](github.com/ftc300/

android-annotation-tutorial.git)

这里再提一下@Target的参数

ElementType含义
ANNOTATION_TYPE注解类型声明
CONSTRUCTOR构造方法声明
FIELD字段声明(包括枚举常量)
LOCAL_VARIABLE局部变量声明
METHOD方法声明
PACKAGE包声明
PARAMETER参数声明
TYPE类、接口(包括注解类型)或枚举声明

我们添加如下注解定义:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FTC300_RUNTIME {
    String value();
}
复制代码

然后绑定Activity,并赋值给注解属性注解的值 。 这里我们需要了解 Class 类以及了解 java.lang.reflect.* , 不难理解,具体这边就不多介绍了

public static <T extends Activity> void bindRuntimeField(T activity){
        Field fields[] = activity.getClass().getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(FTC300_RUNTIME.class)) {
                FTC300_RUNTIME ftc300_runtime = field.getAnnotation(
FTC300_RUNTIME.class);
                try {
                    field.setAccessible(true);
                    field.set(activity,ftc300_runtime.value());
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
复制代码

最后在Activity中调用

    @FTC300_RUNTIME("ftc300_runtime")
    String ftcRuntime;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        bindRuntimeField(this);
        Log.d("MainActivity",TextUtils.concat(“FtcSource:",ftcRuntime).
toString());
    }
复制代码

然后就能看到输出了。 这个比较基础的反射知识,但是这样真的好吗?下篇文章中阐述。

转载于:https://juejin.im/post/5b9b6b1bf265da0ace21213f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值