注解

作者: 阿蕊儿 | 来源:发表于2017-12-20 09:29 被阅读2次

    参考资料:
    http://www.jianshu.com/p/dce26aa75060
    http://www.jianshu.com/p/2a0f883b5aed
    http://blog.csdn.net/asialiyazhou/article/details/53055460
    http://www.jianshu.com/p/9e34defcb76f
    http://www.jianshu.com/p/745655cb431a
    注解分为两类:编译时注解和运行时注解。

    运行时注解

    通常采用反射来实现,由于注解在运行时进行会影响效率

    1.注册注解类

    @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ViewInject{ int value(); }

    2.通过反射获取注解值

    public class AnnotateUtils { public static void injectViews(Activity activity) { Class<? extends Activity> object = activity.getClass(); // 获取activity的Class Field[] fields = object.getDeclaredFields(); // 通过Class获取activity的所有字段 for (Field field : fields) { // 遍历所有字段 // 获取字段的注解,如果没有ViewInject注解,则返回null // if (field.isAnnotationPresent(InjectView.class)) {} ViewInject viewInject = field.getAnnotation(ViewInject.class); if (viewInject != null) { // 获取字段注解的参数,这就是我们传进去控件Id int viewId = viewInject.value(); if (viewId != -1) { try { // 获取类中的findViewById方法,参数为int Method method = object.getMethod("findViewById", int.class); // 执行该方法,返回一个Object类型的View实例 Object resView = method.invoke(activity, viewId); field.setAccessible(true); // 把字段的值设置为该View的实例 field.set(activity, resView); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } } }

    3.使用注解

    `
    @ViewInject(R.id.buy)
    private Button buy;
    @ViewInject(R.id.money)
    private TextView money;
    @ViewInject(R.id.tv_power)
    private TextView power;
    @ViewInject(R.id.tv_life)
    private TextView life;
    @ViewInject(R.id.tv_dex)
    private TextView dex;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AnnotateUtils.injectViews(this);
    }
    `

    编译时注解

    编译时注解采用apt+

    相关文章

      网友评论

          本文标题:注解

          本文链接:https://www.haomeiwen.com/subject/tsuthxtx.html