Java------类操作的方法

    一、    获取一个类的所有父类

           传入一个类,可以获得该类的所有父类。

/**
     * 获取一个类的所有父类 (不包含Object)
     *
     * @param clz
     * @return
     */
    public static List<Class<?>> getSuperClasses(Class<?> clz) {
        List<Class<?>> list = new ArrayList<>();

        Class<?> superclass = clz.getSuperclass();

        if (superclass == Object.class || superclass == null) {
            return list;
        }

        list.add(superclass);

        list.addAll(getSuperClasses(superclass));

        return list;
    }

   二、 获取 指定类型的所有实现的接口

        传入一个类,可以获得该类的所有接口。

/**
     * 获取 指定类型的所有实现的接口
     *
     * @param clz
     * @return
     */
    public static List<Class<?>> getInterfaces(Class<?> clz) {
        List<Class<?>> list = new ArrayList<>();

        // 获取 当前clz 实现的所有 接口
        Class<?>[] interfaces = clz.getInterfaces();

        // 如果 获取不到接口,说明该类没有实现任何接口,直接返回 list
        if (interfaces == null) return list;

        for (Class aClass : interfaces) {
            list.add(aClass);
            list.addAll(getInterfaces(aClass));
        }

        // 获取 clz 的所有父类
        List<Class<?>> superClasses = getSuperClasses(clz);

        for (Class<?> aClass : superClasses) {
            list.addAll(getInterfaces(aClass));
        }
        // 去重
        Set<Class<?>> classes = new HashSet<>(list);

        return List.copyOf(classes);
    }

    三、  获取 某一个类 所有属性

        传入一个类,获得该类的所有属性。

/**
     * 获取 某一个类 所有属性
     *
     * @param clz
     * @return
     */
    public static List<Field> getFields(Class<?> clz) {

        List<Field> list = new ArrayList<>();

        Field[] declaredFields = clz.getDeclaredFields();

        if (declaredFields != null) {

            // 加入到 list 中
            for (Field f : declaredFields) {
                list.add(f);
            }
        }

        // 获取所有父类
        List<Class<?>> superClasses = getSuperClasses(clz);

        for (Class superclass : superClasses) {

            List<Field> fields = getFields(superclass);

            list.addAll(fields);
        }
        return list;
    }

     四、   获取某个属性的 get方法

/**
     * 获取某个属性的 get方法
     *
     * @param field
     * @param clz
     * @return
     * @throws Exception
     */
    public static Method findGetMethodByFieldName(String field, Class<?> clz) throws Exception {
        // 根据 field 的名字找到 对应的 Field
        Field f = clz.getDeclaredField(field);

        // 获取 f 的 类型
        Class<?> type = f.getType();

        String prefix = "get";
        if (type == boolean.class) {
            prefix = "is";
        }

        String methodName = "";
        // 验证 field 前两个字母是否是大写的
        if (!Pattern.matches("[A-Z]{2,}\\w*", field)) {
            //将 field的首字母变大写
            field = String.valueOf(field.charAt(0)).toUpperCase() + field.substring(1);
        }
        methodName = prefix + field;

        return clz.getDeclaredMethod(methodName);
    }

      五、 获取某个属性的 set方法

    /**
     * 获取某个属性的 set方法
     *
     * @param field
     * @param clz
     * @return
     * @throws Exception
     */
    public static Method findSetMethodByFieldName(String field, Class<?> clz) throws Exception {
        // 根据 field 的名字找到 对应的 Field
        Field f = clz.getDeclaredField(field);

        String methodName = "";
        // 验证 field 前两个字母是否是大写的
        if (!Pattern.matches("[A-Z]{2,}\\w*", field)) {
            //将 field的首字母变大写
            field = String.valueOf(field.charAt(0)).toUpperCase() + field.substring(1);
        }
        methodName = "set" + field;

        // 获取 f的类型
        return clz.getDeclaredMethod(methodName, f.getType());
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值