如何实现自定义Java运行时注解功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现自定义Java运行时注解功能相关的知识,希望对你有一定的参考价值。
相信大家在android开发过程中,对注解有一定程度的接触,比如我们在使用EventBus的时候,我们声明@Subscribe(threadMode = ThreadMode.MainThread)
来接受通过EventBus发出来的数据,
还有ButterKnife,我们在使用OnClick添加点击事件或Bind绑定组件的时候,同样也有类似的写法
@Bind(R.id.index_image)
@OnClick(R.id.index_layout)
以至于什么@Override、@Deprecated、@SuppressWarnings这就不需要说了。
我们在写的时候,最大的感触就是:太方便了!!!直接加一个声明就Ok了。你是不是心动了,自己也写几个注解,是不是程序能够更加简洁一些了?先别急,看看注解的结构
@Retention(CLASS)
@Target(FIELD)
public @interface Bind
/** View ID to which the field will be bound. */
int[] value();
其实一点概念都不知道的话,确实看到这个会懵逼。我们一个个来解释一下
Retention 表示在什么级别保留此信息
SOURCE:源码注解,注解仅存在代码中,注解会被编译器丢弃
CLASS:编译时注解,注解会在class文件中保留,但会被VM丢弃
RUNTIME:运行时注解,VM运行期间也会保留该注解,因此可以通过反射来获得该注解
Target 表示作用域,可能的ElementType参数包括:
CONSTRUCTOR:构造方法声明
FIELD:字段声明
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMETER:参数声明
TYPE:类,接口或enum声明
Inherited 容许子类继承
Documented 生成javadoc时会包含注解 参考技术A 斑鸠粮恼过盛辈已
Java自定义注解+反射实现字典码值转换
一.定义自定义注解
@Retention(RetentionPolicy.RUNTIME)//什么时候使用该注解,这里定义为运行时
@Target(ElementType.FIELD)//注解用于什么地方,这里定义为作用于属性上
public @interface Dict
//字典类型,必需(创建字典时的key值)
String key();
//默认值,可选,值为null时使用默认值
String defaultValue() default "";
// OperateType operateType() default OperateType.ADD;
// public static enum OperateType
// ADD("ADD", "1"),
// UPDATE("UPDATE", "2"),
// DELETE("DELETE", "3");
//
// private String name;
// private String index;
//
// private OperateType(String name, String index)
// this.name = name;
// this.index = index;
//
//
// public String getIndex()
// return this.index;
//
//
// public String getName()
// return this.name;
//
//
---------------------------------------------------------
以上是关于如何实现自定义Java运行时注解功能的主要内容,如果未能解决你的问题,请参考以下文章