定义一个注解类
- ElementType.TYPE:用于描述类、接口或enum声明
- ElementType.FIELD:用于描述实例变量
- ElementType.METHOD
- ElementType.PARAMETER
- ElementType.CONSTRUCTOR
- ElementType.LOCAL_VARIABLE
- ElementType.ANNOTATION_TYPE 另一个注释
- ElementType.PACKAGE 用于记录java文件的package信息
@Inherited -定义该注释和子类的关系
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AutoObject {
}
注解的使用
public class ZhujieUtil {
//ZJDemoActivity 创建对象
public static void binda(Object object){
Class aClass = object.getClass();
Field[] fields = aClass.getDeclaredFields();
//给ZJDemoActivity里面的一个成员变量创建对象
for (Field f : fields) {
//这个方法就是判断这个变量有没有加参数里面的注解
AutoObject annotation = f.getAnnotation(AutoObject.class);
if (annotation!=null){
try {
//必须加上暴力fangw
f.setAccessible(true);
//找到这个变量 因为反射机制提供了一个方法让你通过成员变量就可以获取到一个字节码对象
Class type = f.getType();
Constructor constructor = type.getConstructor();
//给ZJDemoActivity里面一个成员变量赋值
f.set(object,constructor.newInstance());
} catch (Exception e) {
e.printStackTrace();
} } }
}
}
在Activity中的使用
//绑定
@AutoObject
MyData datat;
@AutoObject
String datae;
//初始化
ZhujieUtil.binda(this);
//赋值
datae="Hello world";