通过反射获取Object对象里面的方法和属性

105 阅读1分钟

1.首先创建实体类UserDto

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
    private String id;
    private String userName;
    private String age;
}

2.获取对象里的属性

private static void getFields(Object obj){
    Field[] declaredFields = obj.getClass().getDeclaredFields();
    for (Field declaredField : declaredFields) {
        System.out.println(JSON.toJSONString(declaredField.getName()));
    }
}

3.获取对象里的方法

private static void getMethods(Object obj) throws InvocationTargetException, IllegalAccessException {
    Method[] declaredMethods = obj.getClass().getDeclaredMethods();
    for (Method declaredMethod : declaredMethods) {
        System.out.println(JSON.toJSONString(declaredMethod.getName()));
        if ("getId".equals(declaredMethod.getName())){
            // 执行方法
            Object result = declaredMethod.invoke(obj);
            System.out.println(result);
        }
    }
}

4.调用方法执行

public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
    // 创建实体类
    UserDto userDto = new UserDto("1","zhangsan","20");
    // 对象向上转型
    Object obj = userDto;
    // 获取属性
    getFields(obj);
    log.info("-------------------------------------");
    // 获取方法
    getMethods(obj);
}

5.执行结果

结果
"id"
"userName"
"age"
17:35:51.839 [main] INFO com.longfor.aop.controller.LoggerController - -------------------------------------
"getUserName"
"canEqual"
"setAge"
"getAge"
"setId"
"setUserName"
"equals"
"toString"
"hashCode"
"getId"
1