千家信息网

Java中怎么利用反射获取类中字段和方法

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Java中怎么利用反射获取类中字段和方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、自定义注解1、字段注解 imp
千家信息网最后更新 2025年01月23日Java中怎么利用反射获取类中字段和方法

Java中怎么利用反射获取类中字段和方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、自定义注解

1、字段注解

 import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; @Documented@Target({ElementType.FIELD}) //注解应用类型@Retention(RetentionPolicy.RUNTIME) // 注解的类型public @interface FieldInterface {   String name() default "";}

2、方法注解

 import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; @Documented // 标记在生成javadoc时是否将注解包含进去,可有可无@Target({ElementType.METHOD}) //注解应用类型@Retention(RetentionPolicy.RUNTIME) // 注解的类型public @interface MethodInterface {   String name() default "";}

二、创建实体类

public class TestClass { @FieldInterface(name = "字段注解")private String name = "ls";private Constructor[] declaredConstructors;    @MethodInterface(name = "方法注解")   public void isNot() {    }}

三、获取注解值

    //方法注解测试        public void getMethodAnnotationValue() {                // 获取所有的方法                Method[] name = TestClass.class.getDeclaredMethods();                for (Method str : name) {                        // 判断是否方法上存在注解                        boolean annotationPresent = str.isAnnotationPresent(MethodInterface.class);                        if (annotationPresent) {                                // 获取自定义注解对象                                MethodInterface methodAnno = str.getAnnotation(MethodInterface.class);                                // 根据对象获取注解值                                String isNotNullStr = methodAnno.name();                                         System.out.println(isNotNullStr);                        }                }        }     //属性注解测试        public void getFieldAnnotationValue() throws NoSuchFieldException, SecurityException {                // 获取所有的字段                Field[] fields = TestClass.class.getDeclaredFields();                for (Field f : fields) {                        // 判断字段注解是否存在                        boolean annotationPresent2 = f.isAnnotationPresent(FieldInterface.class);                        if (annotationPresent2) {                                FieldInterface name = f.getAnnotation(FieldInterface.class);                                // 获取注解值                                String nameStr = name.name();                                System.out.println(nameStr);                        }                }        }

四、测试

public static void main(String[] args) throws NoSuchFieldException, SecurityException {     TestClass c = new TestClass();     // 获取方法上的注解值     c.getMethodAnnotationValue();      // 获取字段上的注解值     c.getFieldAnnotationValue(); }

输出:

方法注解字段注解

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0