自定义注解(自用)

本文深入探讨Java注解的定义与使用,包括@Inherited、@Retention和@Target等元注解,以及如何利用反射机制实现注解的运行时解析,通过具体示例展示如何为类成员自动创建对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义一个注解类

  • 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";

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值