其他分享
首页 > 其他分享> > ButterKnife实现原理

ButterKnife实现原理

作者:互联网

代码自动生成

注解处理器步骤

注解处理器的实现

可用注解和反射实现

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@interface BindView {
    int value();
}
@BindView(R.id.text1)
TextView textView1;

@BindView(R.id.text2)
TextView textView2;
public static void bind(Activity activity) {
    bindView(activity);
}

//通过反射实现注解的绑定
public static void bindView(Activity activity) {
    try {
        // 获取字节码对象
        Class<? extends Activity> aClass = activity.getClass();

        // 获取全部变量
        Field[] fields = aClass.getDeclaredFields();

        // 遍历全部变量
        for (Field field : fields) {
            // 允许暴力反射
            field.setAccessible(true);

            // 获取带有注解BindView的变量
            BindView annotation = field.getAnnotation(BindView.class);

            if (annotation != null) {
                // 获取注解的值
                int value = annotation.value();
                View view = activity.findViewById(value);
                field.set(activity, view);
            }
        }
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

标签:实现,activity,value,field,ButterKnife,处理器,注解,原理,BindView
来源: https://blog.csdn.net/datian1234/article/details/116982605