Java通过反射机制获取枚举值,并封装进实体类

1. 首先理解反射

  1. Java反射机制是在运行状态中,对于任意一个类(class文件),都可以知道该类的所有属性和方法;
  2. 对于任意一个对象,都能够调用它的任意一个方法和属性;
  3. 这种动态获取的信息已经动态调用对象的方法的功能称为java语言的反射机制。

2. java获取Class对象的三种方式

  1. Class.forName(“类路径”);
  2. 调用属性,通过.class来获取其对应的Class对象;
  3. 利用对象调用Object的getClass方法

3. 通过反射将枚举数据封装进实体类实例

  1. 枚举类Enum
package qs.enums;

/**
 * @author QuS
 * @date 2019/12/13 9:25
 */
public enum Enum {
     


    FRUIT1(1,"苹果"),
    FRUIT2(2,"香蕉"),
    FRUIT3(3,"橘子")

    ;

    private Integer key;
    private String value;

    Enum(Integer key, String value) {
     
        this.key = key;
        this.value = value;
    }

    public Integer getKey() {
     
        return key;
    }

    public void setKey(Integer key) {
     
        this.key = key;
    }

    public String getValue() {
     
        return value;
    }

    public void setValue(String value) {
     
        this.value = value;
    }
}
  1. 实体类EnumEntity
package qs.enums;

/**
 * @author QuS
 * @date 2019/12/13 9:36
 */
public class EnumEntity {
     

    private Integer key;
    private String value;

    public Integer getKey() {
     
        return key;
    }

    public void setKey(Integer key) {
     
        this.key = key;
    }

    public String getValue() {
     
        return value;
    }

    public void setValue(String value) {
     
        this.value = value;
    }
}
  1. 封装Enum为EnumEntity,最后以list形式输出
package qs.enums;

import com.alibaba.fastjson.JSON;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
 * @author QuS
 * @date 2019/12/13 9:25
 */
public class TestEnums {
     

    public static void main(String[] args) {
     
        getEnums();
    }

    private static void getEnums() {
     
        try {
     
            //1. 获取枚举类对象
            Class<?> clz = Class.forName("qs.enums.Enum");
            //2. 得到所有的枚举常量
            Object[] enumConstants = clz.getEnumConstants();
            Method getKey = clz.getMethod("getKey");
            Method getValue = clz.getMethod("getValue");
            //3. 调用对应的方法,得到枚举常量中的字段的值
            List<EnumEntity> list = new ArrayList<>();
            EnumEntity enumEntity = null;
            for (Object enumConstant : enumConstants) {
     
                enumEntity = new EnumEntity();
                int key = Integer.parseInt(String.valueOf(getKey.invoke(enumConstant)));
                String value = String.valueOf(getValue.invoke(enumConstant));
                enumEntity.setKey(key);
                enumEntity.setValue(value);
                System.out.println("key>>:" + key + "  value>>:" + value);
                list.add(enumEntity);
            }
            System.out.println(JSON.toJSONString(list));
        } catch (ClassNotFoundException e) {
     
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
     
            e.printStackTrace();
        } catch (IllegalAccessException e) {
     
            e.printStackTrace();
        } catch (InvocationTargetException e) {
     
            e.printStackTrace();
        }

    }
}

  1. 输出结果
    Java通过反射机制获取枚举值,并封装进实体类_第1张图片

你可能感兴趣的:(java,反射,java)