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

news/2024/5/19 2:44:00 标签: 反射, java

1. 首先理解反射

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

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

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

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

  1. 枚举类Enum
java">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
java">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形式输出
java">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. 输出结果

http://www.niftyadmin.cn/n/1179466.html

相关文章

JS实现jasperreport交叉报表输出页面居中效果

2019独角兽企业重金招聘Python工程师标准>>> 在struts2整合jasperreport报表开发的时候&#xff0c;遇到了这么一个问题。在报表模版使用了交叉报表的时候&#xff0c; 我们知道所有的行和列都是动态生成的。那么我们在设计报表模版的时候一般会根据列的最大值情况设…

减少C++代码编译时间的方法

c 的代码包含头文件和实现文件两部分&#xff0c; 头文件一般是提供给别人&#xff08;也叫客户&#xff09;使用的&#xff0c; 但是一旦头文件发生改变&#xff0c;不管多小的变化&#xff0c;所有引用他的文件就必须重新编译&#xff0c;编译就要花时间&#xff0c;假如你做…

RabbitMQ(一):初始RabbitMQ

1. 消息队列的作用 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 2. RabbitMQ、ActiveMQ、RocketMQ、Kafka四种消息队…

基于ArcEngine+C#开发完成的JLKEngine中间件平台

为什么80%的码农都做不了架构师&#xff1f;>>> JLKEngine中间件平台是采用ArcEngineC#开发完成&#xff0c;其目的是为GIS应用提供一个快速开发构建平台&#xff0c;缩短GIS业务应用系统开发周期&#xff0c;降低GIS应用集成的开发门槛。其特点是通过可视化的构件…

基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od(转)

awk awk是个很好用的东西&#xff0c;大量使用在linux系统分析的结果展示处理上。并且可以使用管道&#xff0c; input | awk | output1.首先要知道形式awk command file 如 awk {print $0} a.txt b.txt &#xff08;后面可以跟一个或多个文件&#xff09;2.command学习。c…

Oracle的function

写在这里&#xff0c;以便于以后忘记格式后可以查询。 CREATE OR REPLACE FUNCTION TEMP_FUNC_WYL(PI_AAA100 VARCHAR2,PI_AAA102 VARCHAR2) --字典转换&#xff0c;把代码值转换成对应的可理解的中文,wyl,20141105RETURN VARCHAR2 ISV_AAA103 VARCHAR2(1000); BEGINSELECT AAA…

RabbitMQ(二):cenos7下安装RabbitMQ

1. RabbitMQ安装和使用 服务的启动&#xff1a;rabbitmq-server start &服务的停止&#xff1a;rabbitmqctl stop_app管理插件&#xff1a;rabbitmq_plugins enable rabbitmq_management访问地址&#xff1a;http://虚拟机的ip地址:15672

360步步惊心:浏览器和搜索二箭连发

上市一年来&#xff0c;被屡屡做空的 360&#xff0c;走得步步惊心。 时至今日&#xff0c;无论是奇虎 360 还是周鸿祎&#xff0c;仍是业界话题焦点。尽管周鸿祎已经学起了太极&#xff0c;心态比一年前更加平和&#xff0c;但是&#xff0c;推出视频搜索一事还是触动了业界的…