精华内容
下载资源
问答
  • 利用JAVA反射获取所有枚举

    千次阅读 2019-05-17 17:57:06
    JAVA反射获取所有枚举定义枚举接口枚举获取所有枚举输出 定义枚举接口 public interface BaseEnum { /** * 获取枚举值 * @returnint */ Integer getValue(); /** * 获取枚举名称 * @return */ String ...

    定义枚举接口

    public interface BaseEnum {
        /**
         * 获取枚举值
         * @returnint
         */
        Integer getValue();
    
        /**
         * 获取枚举名称
         * @return
         */
        String getName();
    }
    

    枚举类

    @Getter
    public enum TestEnum implements BaseEnum {
        TEST1("name1",1),
        TEST2("name1",2),
        TEST3("name1",3);
    
        private String name;
        private Integer value;
    
        private TestEnum(String name,Integer value){
            this.name = name;
            this.value = value;
        }
    
    }
    

    获取所有枚举

        public static void test4(){
    
            Reflections reflections = new Reflections("com.xxx.modules");
    
            Set<Class<? extends BaseEnum>> monitorClasses = reflections.getSubTypesOf(BaseEnum.class);
    
            System.out.println("size:"+monitorClasses.size());
            monitorClasses.forEach(m->{
                try {
                    System.out.println("name:"+m.getSimpleName());
                    BaseEnum[] enumConstants = m.getEnumConstants();
    
                    for (BaseEnum anEnum : enumConstants) {
                        System.out.println("enumName:"+anEnum+"  value:"+anEnum.getValue()+"  name:"+anEnum.getName());
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        }
    

    输出

    执行输出结果

    展开全文
  • * 获取枚举值 * @returnint */ Integer getValue(); /** * 获取枚举名称 * @return */ String getName(); } 枚举类 @Getter public enum TestEnum implements BaseEnum { TEST1("name1",1

    定义枚举接口

    public interface BaseEnum {
        /**
         * 获取枚举值
         * @returnint
         */
        Integer getValue();
    
        /**
         * 获取枚举名称
         * @return
         */
        String getName();
    }
    

    枚举类

    @Getter
    public enum TestEnum implements BaseEnum {
        TEST1("name1",1),
        TEST2("name1",2),
        TEST3("name1",3);
    
        private String name;
        private Integer value;
    
        private TestEnum(String name,Integer value){
            this.name = name;
            this.value = value;
        }
    
    }
    

    获取所有枚举

        public static void test4(){
    
            Reflections reflections = new Reflections("com.xxx.modules");
    
            Set<Class<? extends BaseEnum>> monitorClasses = reflections.getSubTypesOf(BaseEnum.class);
    
            System.out.println("size:"+monitorClasses.size());
            monitorClasses.forEach(m->{
                try {
                    System.out.println("name:"+m.getSimpleName());
                    BaseEnum[] enumConstants = m.getEnumConstants();
    
                    for (BaseEnum anEnum : enumConstants) {
                        System.out.println("enumName:"+anEnum+"  value:"+anEnum.getValue()+"  name:"+anEnum.getName());
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        }
    

    输出

    执行输出结果

    展开全文
  • 所以如果要获取枚举常量中的值,首先需要使用class的getEnumConstants()方法获取枚举类中所有枚举常量,然后使用类中对应的方法,得到常量中包含字段的值。代码如下:1.枚举类代码示例package ...

    先说下枚举类的结构:枚举类中有许多枚举常量,枚举常量由枚举类中各个字段组成,更确切的说,枚举常量由构造方法入参字段构成。

    所以如果要获取枚举常量中的值,首先需要使用class的getEnumConstants()方法获取枚举类中所有的枚举常量,然后使用类中对应的方法,得到常量中包含字段的值。代码如下:

    1.枚举类代码示例

    package com.ecarx.jsk.jdk.poi;

    public enum ResultCode {

    CODE_5200("8200", "认证失败"),

    CODE_5201("8201", "用户不存在"),

    CODE_5202("8202", "Token验证失败"),

    CODE_5203("8203", "Token刷新失败");

    private String code;

    private String name;

    private ResultCode(String code, String name) {

    this.code = code;

    this.name = name;

    }

    public String getCode() {

    return this.code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public String getName() {

    return this.name;

    }

    public void setName(String name) {

    this.name = name;

    }

    }2.利用反射获取枚举值代码

    @Test

    public void getEnumValue() throws Exception {

    // 1.得到枚举类对象

    Class> clz = ResultCode.class;

    // 2.得到所有枚举常量

    Object[] objects = clz.getEnumConstants();

    Method getCode = clz.getMethod("getCode");

    Method getName = clz.getMethod("getName");

    for (Object obj : objects){

    // 3.调用对应方法,得到枚举常量中字段的值

    System.out.println("code=" + getCode.invoke(obj) + "; name=" + getName.invoke(obj));

    }

    }

    3.输出结果

    4b8579998792be13da4a88a9db318736.png

    展开全文
  • 在开发过程中,经常会遇到需要根据枚举的code获取对应name或根据name获取对应code的需求;抑或是需要根据code或name获取对应枚举对象。 在开发过程中,前端需要获取下拉选择器中的数据项,通常存放数据库字典表中,...

    场景:

    在开发过程中,经常会遇到需要根据枚举的code获取对应name或根据name获取对应code的需求;抑或是需要根据code或name获取对应枚举对象。
    在开发过程中,前端需要获取下拉选择器中的数据项,通常存放数据库字典表中,本文采取返回枚举列表的方式提供。

    一、Enum根据code/name获取枚举对象、根据code获取name、根据name获取code。

        @Getter
        @AllArgsConstructor
        public enum BorrowStatusEnum {
            /**
             * 借基差还款状态
             */
            IN_USE("IN_USE", "使用中"),
            OVERDUE("OVERDUE", "已超期"),
            DEDUCTION("DEDUCTION", "抵扣中"),
            FINISH("FINISH", "已还款");
            /**
             * 状态
             */
            public final String code;
            /**
             * 名称
             */
            public final String name;
    
            /**
             * 根据code查找
             * @param code 枚举code
             * @return 枚举对象
             */
            public static BorrowStatusEnum findEnumByCode(String code) {
                for (BorrowStatusEnum statusEnum : BorrowStatusEnum.values()) {
                    if (statusEnum.getCode().equals(code)) {
                        //如果需要直接返回name则更改返回类型为String,return statusEnum.name;
                        return statusEnum;
                    }
                }
                throw new IllegalArgumentException("code is invalid");
            }
    
            /**
             * 根据name查找
             * @param name 枚举name
             * @return 枚举对象
             */
            public static BorrowStatusEnum findEnumByName(String name) {
                for (BorrowStatusEnum statusEnum : BorrowStatusEnum.values()) {
                    if (statusEnum.getName().equals(name)) {
                        //如果需要直接返回code则更改返回类型为String,return statusEnum.code;
                        return statusEnum;
                    }
                }
                throw new IllegalArgumentException("name is invalid");
            }
    
        }
    
    测试:
        public static void main(String[] args) {
            System.out.println("根据code获取枚举对象:" + BorrowStatusEnum.findEnumByCode("IN_USE"));
            System.out.println("根据name获取枚举对象:" + BorrowStatusEnum.findEnumByName("已还款"));
            
            System.out.println("根据code获取name:" + BorrowStatusEnum.findEnumByCode("IN_USE").name);
            System.out.println("根据name获取code:" + BorrowStatusEnum.findEnumByName("已还款").code);
        }
    
    输出:
    根据code获取枚举对象:IN_USE
    根据name获取枚举对象:FINISH
    根据code获取name:使用中
    根据name获取code:FINISH
    

    二、获取Enum列表

    @Getter
        @AllArgsConstructor
        public enum BorrowStatusEnum {
            /**
             * 借基差还款状态
             */
            IN_USE("IN_USE", "使用中"),
            OVERDUE("OVERDUE", "已超期"),
            DEDUCTION("DEDUCTION", "抵扣中"),
            FINISH("FINISH", "已还款");
            /**
             * 状态
             */
            public final String code;
            /**
             * 名称
             */
            public final String name;
    
            /**
             * 转为数据
             * @return 枚举对象数组
             */
            public static List<Map<String, String>> toList() {
                List<Map<String, String>> list = new ArrayList<>();
                for (BorrowStatusEnum item : BorrowStatusEnum.values()) {
                    Map<String, String> map = new HashMap<>();
                    map.put("code", item.getCode());
                    map.put("name", item.getName());
                    list.add(map);
                }
                return list;
            }
    
        }
    
    测试:
        public static void main(String[] args) {
            System.out.println("enum toString:" + BorrowStatusEnum.toList());
        }
    
    输出:
    enum toString:[{code=IN_USE, name=使用中}, {code=OVERDUE, name=已超期}, {code=DEDUCTION, name=抵扣中}, {code=FINISH, name=已还款}]
    

    三、附上获取Enum列表工具类(使用工具类就不需要每个Enum都加一遍toList方法了!)

    public class EnumUtils {
    
        private static final String ENUM_CLASSPATH ="java.lang.Enum";
    
        public static List<Map<String, Object>> enumToListMap(Class<?> enumClass) {
            List<Map<String, Object>> resultList= new ArrayList<>();
            if (!ENUM_CLASSPATH.equals(enumClass.getSuperclass().getCanonicalName())) {
                return resultList;
            }
            // 获取所有public方法
            Method[] methods = enumClass.getMethods();
            List<Field> fieldList = new ArrayList<>();
            //1.通过get方法提取字段,避免get作为自定义方法的开头,建议使用 ‘find’或其余命名
            Arrays.stream(methods)
                    .map(Method::getName)
                    .filter(
                            methodName -> methodName.startsWith("get") && !"getDeclaringClass".equals(methodName) && !"getClass".equals(methodName)
                    ).forEachOrdered(methodName -> {
                try {
                    Field field = enumClass.getDeclaredField(StringUtils.uncapitalize(methodName.substring(3)));
                    fieldList.add(field);
                } catch (NoSuchFieldException | SecurityException e) {
                    e.printStackTrace();
                }
            });
     
            //2.将字段作为key,逐一把枚举值作为value 存入list
            if (CollectionUtils.isEmpty(fieldList)) {
                return resultList;
            }
     
            Enum[] enums = (Enum[]) enumClass.getEnumConstants();
            for (Enum anEnum : enums) {
                Map<String, Object> map = new HashMap<>(fieldList.size());
                for (Field field : fieldList) {
                    field.setAccessible(true);
                    try {
                        // 向map集合添加字段名称 和 字段值
                        map.put(field.getName(), field.get(anEnum));
                    } catch (IllegalArgumentException | IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
                // 将Map添加到集合中
                resultList.add(map);
            }
            return resultList;
        }
     
    }
    
    测试:
        public static void main(String[] args) {
            //调用时需传入枚举类.class
            System.out.println("EnumUtils.enumToListMap:" + EnumUtils.enumToListMap(StatusEnum.BorrowStatusEnum.class));
        }
    
    输出:
    EnumUtils.enumToListMap:[{name=使用中, code=IN_USE}, {name=已超期, code=OVERDUE}, {name=抵扣中, code=DEDUCTION}, {name=已还款, code=FINISH}]
    
    工具类参考博客:https://blog.csdn.net/qq_35387940/article/details/113772411
    展开全文
  • java反射获取枚举所有的值

    万次阅读 2019-05-09 15:16:40
    由于项目的发展,枚举也是越来越多,为了方便前端直接取值,而不是每一次增加枚举给说一次,就写了一个根据枚举包名+类名获取所有枚举值的接口;具体方法如下: 一、我返回的一个List<Map<String,Object>...
  • java:获取所有枚举

    2021-07-30 15:56:03
  • java获取枚举类的所有属性

    千次阅读 2020-11-19 10:48:11
    :通过取项目某个包路径下的所有枚举类来获取该类的所有属性 直接上java代码: package com.xxx.common.ennum; import cn.hutool.core.util.ClassUtil; import java.lang.reflect.Method; import java.util....
  • Java枚举枚举初识

    万次阅读 2020-12-15 16:26:21
    1. **枚举的好处**:可以将常量...3. 枚举的底层原理是继承了Enum 抽象类,编译器最终会将枚举编译成一个普通的Java类供Java 虚拟机使用 4. 枚举中申明的变量都是有类型的,那就是该枚举类型(其实也是一个普通的java类)
  • Java枚举枚举进阶

    万次阅读 2020-12-16 11:13:52
    上一节我们讲了[枚举初识]里面主要讲了枚举的实现原理,我们从编译器的角度看了枚举的底层实现以及枚举常用的方法 今天我们看一下枚举添加自定义方法和构造函数,枚举的抽象和接口,枚举与switch 和基于枚举的单例,...
  • 有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回。 示例: 枚举 /** * @Author: JCccc * @Description: * @Date: Create in 10:51 2021...
  • java中常用的枚举方法有values和valueof valueOf方法会把一个String类型的名称...values是获取所有枚举项 package HtppClient1.EnumUtil; import java.lang.reflect.Field; import java.lang.reflect.Invoc...
  • Java 枚举枚举

    2021-07-15 14:59:32
    Java 枚举 在本教程中,我们将学习 Java 中的枚举。我们将在示例的帮助下学习创建和使用枚举枚举类。 在 Java 中,枚举(enumeration 的缩写)是一种具有一组固定常量值的类型。我们使用enum关键字来...
  • java反射获取枚举

    万次阅读 2018-05-06 19:35:39
    所以如果要获取枚举常量中的值,首先需要使用class的getEnumConstants()方法获取枚举类中所有枚举常量,然后使用类中对应的方法,得到常量中包含字段的值。代码如下:1.枚举类代码示例package ...
  • Java 枚举(enum) 详解7种常见的用法

    万次阅读 多人点赞 2016-08-11 11:14:45
    JDK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。 大师兄我【大师兄】又加上自己的理解,来帮助各位理解一下。 用法一:常量 在JDK1.5之前,我们定义常量都是:...
  • 有时, 我们需要根据当前枚举值, 自动获取代码中声明的下个枚举值. 可以使用以下代码实现 这里举例我们的枚举类是 OrderStatusEnum // 所有枚举元素 private static OrderStatusEnum[] vals = values(); // 上一...
  • 枚举ordinal()方法使用Java中的ordinal()方法获取Java枚举常量的序数。以下是一个例子-示例publicclassDemo{enumDevices{LAPTOP,MOBILE,TABLET,DESKTOP;}publicstaticvoidmain(String[]args){Devicesd1,d2,d3,d...
  • java 通过反射获取枚举类,及枚举类的值,枚举枚举实例名。本项目为普通java项目
  • Java入门-枚举

    2021-07-30 23:09:41
    Java入门-枚举 引入 编写季节类(Season),该类只有四个对象(spring,summer,autumn,winter) 概念 枚举(enum)全称为 enumeration, 是 JDK 1.5 中引入的新特性。 语法 public enum Color{ //默认添加 ...
  • 什么是枚举Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列...
  • Java中的枚举

    2021-08-11 10:12:44
    Java中的枚举简介定义格式枚举类的主要方法实现接口的枚举类注意事项 简介 枚举Java1.5引入的新特性,通过关键字enum来定义枚举类。 定义格式 权限修饰符 enum 枚举名称 { 实例1,实例2,实例3,... ,实例n ; } ...
  • That's not possible without B extending A, which is not supported in java. The way to proceed is to create an enum which contains the combined values of A and B, e.g., enum C { A1, A2, A3, B1, B2; }
  • Java枚举

    2020-12-17 21:39:33
    文章目录Java枚举自定义枚举方法在 switch 中使用枚举Java枚举 Java 枚举是一个特殊的类,一般表示一组常量,使用 enum 关键字来定义。 实际使用中,会用枚举替代常量,这样有什么好处: 枚举方式定义的常量...
  • java枚举获取枚举

    2021-03-17 14:02:25
    创建枚举 public enum RefundTypeEnum { /** * 值类型 */ ONLY_REFUND("1", "仅退款"), REFUNDS("2", "退货退款"); /** * 数据库存放编码 */ private String code; /** * 描述 */ private String desc;...
  • Java 枚举

    千次阅读 2018-07-20 20:24:39
    Java 枚举
  • 示例假设我们有一个枚举DayOfWeek:enumDayOfWeek{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;}枚举使用内置的静态valueOf()方法进行编译,该静态方法可用于按其名称查找常量:StringdayName=...
  • Java-Enum枚举

    2021-03-31 12:31:08
    文章目录Java-Enum枚举类前言一、枚举的实现原理二、使用反射查看枚举枚举的高级使用 前言 介绍 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 使用关键字enum来定义枚举类...
  • I have a enum defined like this and I would like to be able to obtain the strings for the individual statuses. How should I write such a method?I can get the int values of the statuses but would like ...
  • 首先定义枚举 [code="java"] public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } [/code] 测试代码如下: [code="java"] public class TestColor { public static void...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 135,658
精华内容 54,263
关键字:

java获取所有枚举

java 订阅