获取自定义注解上的值

博客展示了Java自定义注解的代码实现。定义了`AnnotationTest`注解,包含`age`和`name`属性。创建`Person`类使用该注解修饰属性,还给出`Test`类,通过反射获取注解属性值并为`Person`类属性赋值,体现了自定义注解在Java中的应用。

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

package 自定义注解;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest {
    String age() default "20";
    String name() default "fz";

}
 

 

package 自定义注解;
public class Person {
        @AnnotationTest(name = "fg")
        private String name;
        @AnnotationTest(age="24")
        private String age;
}

 

 

package 自定义注解;

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedType;
import java.lang.reflect.Field;
/*
 * 1.首先获取优质定义注解修饰类的类对象,根据类对象获取对应的属性。
 * 2.判断属性上是否有注解修饰,有就获取对应的注解。(通过属性获取对应的注解,获取属性上的值就用属性去declaredField.getAnnotation(AnnotationTest.class);)
 * 3.为属性赋值。第一步中的属性赋值为注解中获取的属性值。
 * 
 * */

public class Test {
    public static void main(String[] args) throws Exception {
        Class p=Person.class;
        Field declaredField = p.getDeclaredField("name");
        declaredField.setAccessible(true);
        if(declaredField.isAnnotationPresent(AnnotationTest.class)) {
            AnnotationTest annotation = declaredField.getAnnotation(AnnotationTest.class);
            
            
            //System.out.println(annotation.age()+":"+annotation.name());
            String name = annotation.name();
            Person p1=new Person();
            declaredField.set(p1, name);//为declaredfield属性赋name值,其中name必须是p1中的属性。所以需要p1对象
            System.out.println(declaredField.get(p1));

            
            
        }
    }
}

### Java 获取自定义注解属性的方法 在 Java 中,可以通过反射机制来获取自定义注解及其属性。具体实现方式如下: #### 定义自定义注解 为了能够通过反射访问到注解的信息,需要确保该注解被保留至运行时阶段。这通常由 `@Retention` 注解指定为 `RetentionPolicy.RUNTIME`。 ```java package com.uno.ray; import java.lang.annotation.*; @Documented @Inherited @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) // 此注解只能作用于方法上 public @interface MethodAnnotation { String desc() default "method1"; } ``` 此段代码展示了如何创建一个名为 `MethodAnnotation` 的自定义注解,并设置其默认描述字符串[^2]。 #### 使用注解标记目标元素 一旦定义好注解之后,则可以在类、字段或者方法之上应用它。例如,在某个特定的方法上面加上这个新建立起来的标签。 ```java public class TestClass { @MethodAnnotation(desc = "This is a test method.") public void testData() { System.out.println("Testing..."); } } ``` 这段代码展示了一个简单的测试类 `TestClass` 和带有自定义注解的方法 `testData()`。 #### 反射读取注解信息 最后一步就是利用反射技术去检索这些元数据了。下面是一个完整的例子说明怎样做到这一点: ```java import java.lang.reflect.Method; import java.util.Arrays; public class AnnotationReader { public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName("com.uno.ray.TestClass"); for (Method m : clazz.getDeclaredMethods()) { if (m.isAnnotationPresent(MethodAnnotation.class)) { MethodAnnotation annotation = m.getAnnotation(MethodAnnotation.class); System.out.printf("Found annotated method '%s' with description: %s%n", m.getName(), annotation.desc()); } } } } ``` 上述程序遍历给定类型的每一个成员函数(`getDeclaredMethods`);对于那些确实携带有所需种类标注者(`isAnnotationPresent`),则进一步提取具体的实例化对象(`getAnnotation`)并打印出来相应的细节信息[^3]。 ### 注意事项 当尝试获取注解的时候,请确认所使用的注解已经被声明为能够在运行期间可见(即设置了合适的 Retention Policy)。此外,还需要注意的是只有当 JVM 加载了含有相应注解的目标实体后才能成功取得它们的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值