Java获取反射的三种方式及应用

1.获取反射的三种方式

1.1 通过Class.class获取

@Data
public class ModelA {

    private String name;

    private Integer age;

    private LocalDateTime dateTime;

}
复制代码
 Class<ModelA> aClass = ModelA.class;
复制代码

1.2 通过obj.getClass()方式获取

 ModelA modelA = new ModelA();
 Class<? extends ModelA> aClass1 = modelA.getClass();
复制代码

1.3 通过Class.forName()方式获取

 Class<?> aClass1 = Class.forName("com.demo.model.ModelA");
复制代码

通过Class.forName()方式获取反射需要捕获java.lang.ClassNotFoundException

2. 通过反射获取对象中的所有属性包括父类的

public List<Field> getAllField(Class<?> aClass) {
        if (aClass == null) {
            return new ArrayList<>();
        }
        List<Field> fieldList = new ArrayList<>();
        while (aClass != null) {
            fieldList.addAll(Arrays.asList(aClass.getDeclaredFields()));
            aClass = aClass.getSuperclass();
        }
        return fieldList;
    }
复制代码

3. 通过反射获取对象属性的信息

public static void printFieldInfo(Field field) {
    // 属性名称
    String name = field.getName();
    // 属性类型 全限定类名(基本类型返回就是基本类型 如 int)
    String fieldTypeName = field.getGenericType().getTypeName();
    // 获取修饰在属性上的所有注解
    Annotation[] annotationArray = field.getDeclaredAnnotations();
    // 获取修饰在属性上的@Value注解
    Value declaredAnnotation = field.getDeclaredAnnotation(Value.class);
}
复制代码

4. 通过反射获取方法的信息

public static void printMethodInfo(Method method) {
    for (Parameter parameter : method.getParameters()) {
        // 这里得到的参数name是arg0
        String name = parameter.getName();
        // 全限定类名(基本类型返回就是基本类型 如 int)
        String parameterType = parameter.getParameterizedType().getTypeName();
        // 获取修饰在参数上的所有注解
        Annotation[] annotationArray = parameter.getDeclaredAnnotations();
        // 获取修饰在参数上的@RequestParam注解
        RequestParam requestParam = parameter.getDeclaredAnnotation(RequestParam.class);
    }

    // 方法的返回类型
    String methodReturnTypeName = method.getGenericReturnType().getTypeName();
    // 获取修饰在方法上的所有注解
    Annotation[] annotationArray = method.getDeclaredAnnotations();
    // 获取修饰在方法上的@Override注解
    Override override = method.getDeclaredAnnotation(Override.class);
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享