精华内容
下载资源
问答
  • 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代码:

    package com.xxx.common.ennum;
    
    
    import cn.hutool.core.util.ClassUtil;
    
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Set;
    
    /**
     * @Desc 获取枚举类的所有属性
     * @Author: cxl
     * @Date: 2020/11/18 16:49
     * @Version 1.0
     */
    public class EnumUtils {
    
        private static final String basePackage = "com.xxx.common.ennum";
    
        public static HashMap<String, List<EnumDto>> getEnums() throws Exception {
            Set<Class<?>> classes = ClassUtil.scanPackage(basePackage);
            HashMap<String, List<EnumDto>> enums = new HashMap<>();
            for (Class<?> aClass : classes) {
                if (ClassUtil.isEnum(aClass)) {
                    Class<Enum> em = (Class<Enum>) aClass;
                    Method codeMethod = ClassUtil.getDeclaredMethod(aClass, "getCode");
                    Method descMethod = ClassUtil.getDeclaredMethod(aClass, "getDesc");
                    if (codeMethod == null || descMethod == null) continue;
                    //得到enum的所有实例
                    Object[] objs = em.getEnumConstants();
                    EnumDto dto;
                    List<EnumDto> list = new ArrayList<>();
                    for (Object obj : objs) {
                        dto = new EnumDto();
                        dto.setCode((String) codeMethod.invoke(obj));
                        dto.setDesc((String) descMethod.invoke(obj));
                        list.add(dto);
                    }
                    enums.put(aClass.getName().replace(basePackage + ".", "").replace("$","."), list);
                }
            }
            return enums;
        }
    }
    
    package com.xxx.common.ennum;
    
    import lombok.Data;
    
    /**
     * @Author: cxl
     * @Date: 2020/11/18 17:57
     * @Version 1.0
     */
    @Data
    public class EnumDto {
    
        private String code;
    
        private String desc;
    }
    

     一个枚举类示例:

    package com.xxx.common.ennum;
    
    import com.xxx.modules.market.goods.ennum.MarketEnum;
    
    /**
     * @Author: cxl
     * @Date: 2020/6/3 14:34
     * @Version 1.0
     */
    public interface BusCheckEnum {
    
        enum CheckResult implements BusCheckEnum {
            AGREE("agree", "同意"),
            WAIT("wait","等待审核"),
            REFUSE("refuse", "拒绝");
    
    
            private String code;
    
            private String desc;
    
            public String getCode() {
                return code;
            }
    
    
            public String getDesc() {
                return desc;
            }
    
    
            CheckResult(String code, String desc) {
                this.code = code;
                this.desc = desc;
            }
    
            /**
             * 根据code获取desc
             * @return
             */
            public static String getDescByCode(String code){
                for(CheckResult platformFree:CheckResult.values()){
                    if(code.equals(platformFree.getCode())){
                        return platformFree.getDesc();
                    }
                }
                return  null;
            }
        }
    }
    

     

     接口调用结果:

    {
        "code": 0,
        "msg": "成功",
        "data": {
            "ResourceTypeEnum": [
                {
                    "code": "all",
                    "desc": "全部"
                },
                {
                    "code": "expert",
                    "desc": "问答"
                },
                {
                    "code": "online",
                    "desc": "商城"
                },
                {
                    "code": "imgtext",
                    "desc": "图文"
                }
            ],
            "WxMsgTagEnum": [
                {
                    "code": "newUserReg",
                    "desc": "新用户注册"
                },
                {
                    "code": "buySuccess",
                    "desc": "购买成功"
                }
            ],
            "BusCheckEnum.CheckResult": [
                {
                    "code": "agree",
                    "desc": "同意"
                },
                {
                    "code": "wait",
                    "desc": "等待审核"
                },
                {
                    "code": "refuse",
                    "desc": "拒绝"
                }
            ],
            
        }
    }

    ClassUtil的来源是hutool工具包,下载地址:https://hutool.cn/docs/#/

    在系统登录时调用该接口,获取所有枚举类集合存在本地缓存中,具体要用的时候直接传入类名来取即可

    展开全文
  • java中常用的枚举方法有values和valueof valueOf方法会把一个String类型的名称...values是获取所有枚举项 package HtppClient1.EnumUtil; import java.lang.reflect.Field; import java.lang.reflect.Invoc...

     java中常用的枚举方法有values和valueof

    valueOf方法会把一个String类型的名称转变成枚举项,也就是在枚举项中查找字面值和该参数相等的枚举项。

     values是获取所有的枚举项

    package HtppClient1.EnumUtil;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;
    import org.springframework.util.ReflectionUtils;
    
    import com.sun.org.apache.bcel.internal.generic.IfInstruction;
    
    
    enum TestEnums {
    	weirenzheng(0, "0、未认证;", 16, -1, 0),
        onceTime(1, "上月支付1次及以下;", 8, 0, 1),
        towTimes(2, "上月支付1-2次", 12, 1, 2),
        threeTimes(3, "上月支付3-4次;", 16, 3, 4),
        fiveTimes(4, "上月支付5-7次", 20, 4, 7),
        sixTimes(5, "上月支付7次以上", 24, 7, Integer.MAX_VALUE);
        public int code;//排序
        public String desc;//描述
        public int score;//分值
        public int lower;//最低次数
        public int high;//最高次数
    
        TestEnums() {
        }
    
        TestEnums(int code, String desc, int score, int lower, int high) {
            this.code = code;
            this.desc = desc;
            this.score = score;
            this.lower = lower;
            this.high = high;
        }
    
        public int getCode() {
            return code;
        }
    
        public String getDesc() {
            return desc;
        }
    
    
    
        public int getScore() {
            return score;
        }
    
    
    
        public int getLower() {
            return lower;
        }
    
    
    
        public int getHigh() {
            return high;
        }
        /**
         * 根据code返回枚举值
         * @param Code
         * @return
         */
        public static TestEnums   getEumByCode(int Code){
        	for(TestEnums testEnums: TestEnums.values()) {
        		if(testEnums.getCode()==Code) {
        			return testEnums;
        		}
        	}
        	return null;  	
        }
    
        /**
         * 根据序号获取枚举数组中的值,序号必须从0开始
         * @param key
         * @return
         * @throws IllegalAccessException
         * @throws IllegalArgumentException
         * @throws InvocationTargetException
         * @throws InstantiationException
         */
        public static <T> List<T>   getEumByKey(int Code) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
        	List<String> enumList=getEumValueList();
        	List<T> enumList1=new ArrayList<T>();
        	for(TestEnums testEnums: TestEnums.values()) {
        		if(testEnums.getCode()==Code) {
        			Class<?> clazz=testEnums.getClass();
        			// 获取所有常量
        	        Object object = clazz.getEnumConstants()[Code];
            	    Field[]  filedFields=clazz.getFields();    	            	        	
    				for (Field field : filedFields) {   				
    					field.setAccessible(true);
    					Object sssObject=field.get(object);
    					if(enumList.contains(field.getName())) {
    						continue;
    					}else {
    						if(sssObject!=null)
    							enumList1.add((T) sssObject);
    					}
    				}	
        			return enumList1;
        		}
        	}
        	return null;
        }
        /**
         * 获取枚举值常量列表
         * @param Code
         * @return
         */
        public static List<String>  getEumValueList() {
        		  List<String> list=new ArrayList<String>();
        		  for(Object object:TestEnums.values()) {
    					list.add(object.toString());
        		  }
        		  return list;	
        }
        /**
         * 传入方法名称  values是值 ,field是 字段mingcheng
         * @param <T>
         * @param enumType
         * @param value
         * @param field
         * @return
         * @throws Exception
         */
        public static <T extends Enum<T>> T getEnumOnValue(Class<T> enumType, String value, String field) throws Exception {
    
           for (Object obj : enumType.getEnumConstants()) {
              Method m = obj.getClass().getDeclaredMethod("values", null);
              Object[] results = (Object[]) m.invoke(obj, null);
              for (Object result : results) {
                 Field codeField = result.getClass().getDeclaredField(field);
                 ReflectionUtils.makeAccessible(codeField);
                 String fileValue = String.valueOf(ReflectionUtils.getField(codeField, result));
                 if (fileValue.equals(value)) {
                    return (T) result;
                 }
    
              }
           }
           return null;
        }
    }

    test代码:

    import java.util.List;
    
    /**
     * Hello world!
     *
     */
    public class App 
    {		 
        public static void main( String[] args ) throws Exception
        {
        	TestEnums testEnums = TestEnums.getEnumOnValue(TestEnums.class, "1", "code");
           List<Object> list=TestEnums.getEumByKey(1);
           for (Object string : list) {
    		System.out.println(":"+string);
           }
        }
    }

     

    展开全文
  • java反射获取枚举所有的值

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

    由于项目的发展,枚举也是越来越多,为了方便前端直接取值,而不是每一次增加枚举给说一次,就写了一个根据枚举包名+类名获取所有的枚举值的接口;具体方法如下:

    一、我返回的一个List<Map<String,Object>>的对象,传入的是枚举的包名+类名

       如果确定了枚举的包名,其实也可以直接传入枚举的类名就可以了

    /**
         * 根据枚举的字符串获取枚举的值
         *
         * @param className 包名+类名
         * @return
         * @throws Exception
         */
        public static List<Map<String, Object>> getAllEnumByClassName(String className) throws Exception {
            // 1.得到枚举类对象
            Class<Enum> clz = (Class<Enum>) Class.forName(className);
            // 2.得到所有枚举常量
            Object[] objects = clz.getEnumConstants();
            Method getCode = clz.getMethod("getCode");
            Method getMessage = clz.getMethod("getMessage");
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            Map<String, Object> map = null;
            for (Object obj : objects) {
                map = new HashMap<String, Object>();
                map.put("code", getCode.invoke(obj));
                map.put("message", getMessage.invoke(obj));
                list.add(map);
            }
            return list;
        }
    二、和第一个方法基本一样,就是中途获取的常量为枚举
    /**
     * 根据枚举的字符串获取枚举的值
     *
     * @param className 包名+类名
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> getAllEnum(String className) throws Exception {
        // 得到枚举类对象
        Class<Enum> clazz = (Class<Enum>) Class.forName(className);
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        //获取所有枚举实例
        Enum[] enumConstants = clazz.getEnumConstants();
        //根据方法名获取方法
        Method getCode = clazz.getMethod("getCode");
        Method getMessage = clazz.getMethod("getMessage");
        Map<String, Object> map = null;
        for (Enum enum1 : enumConstants) {
            map = new HashMap<String, Object>();
            //执行枚举方法获得枚举实例对应的值
            map.put("code", getCode.invoke(enum1));
            map.put("message", getMessage.invoke(enum1));
            list.add(map);
        }
        return list;
    }                                                                                                         
    

    比如:我有一个枚举是这样子的:

    在页面上通过接口,传入当前包名+类名获取得劲结果如下:

    以上就是通过反射获取枚举值的方法,当然,还有别的方法,因为反射也不止这样一种

    展开全文
  • 示例:下面的getName方法 /** * 申请人特殊程序状态 * @author vhukze * @date 2021/2/7 - 9:11 */ @Getter public enum ApplicantSpecialStatusEnum { ... 已完成立案审查_待接收立案通知(4), ...

    示例:下面的getName方法

    /**
     * 申请人特殊程序状态
     * @author vhukze
     * @date 2021/2/7 - 9:11
     */
    @Getter
    public enum ApplicantSpecialStatusEnum {
    
        未提交(1),
        待缴费(2),
        正在进行立案审查(3),
        已完成立案审查_待接收立案通知(4),
        已收到立案通知_待选择仲裁员(5),
        已完成仲裁员选择_待接收组庭通知(6),
        已收到组庭通知_待庭审排期(7),
        等待开庭(8),
        等待案件完结后接收结案通知(9),
        已结案(10);
    
        private final Integer status;
    
        ApplicantSpecialStatusEnum(Integer status) {
            this.status = status;
        }
    
        public static String getName(Integer no){
            for (ApplicantSpecialStatusEnum value : ApplicantSpecialStatusEnum.values()) {
                if(value.getStatus() == no){
                    return value.name();
                }
            }
            return "";
        }

     

    展开全文
  • Java根据枚举名使用反射获取枚举

    千次阅读 2018-12-12 18:36:26
    由于前端需要根据枚举名获取实时获取枚举值,所以通过反射去得到枚举数据. (一) 首先我们新建一个枚举类接口,用于之后反射使用 package com.littlematch.enums.biz; /** * 枚举值接口定义类 */ public interface ...
  • java反射获取枚举

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

    千次阅读 2019-05-17 17:57:06
    JAVA反射获取所有枚举定义枚举接口枚举类获取所有枚举输出 定义枚举接口 public interface BaseEnum { /** * 获取枚举值 * @returnint */ Integer getValue(); /** * 获取枚举名称 * @return */ String ...
  • 讲真,java的枚举类提供的方法太少了,Enum只有两个valueOf可以搞,如果碰上需要传入枚举类型的值,获取枚举类对象或者枚举类型名称的时候,只能干瞪眼,或者循环比对。最近项目就遇到这种,而且感觉以后以及别人都...
  • java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
  • * 获取枚举值 * @returnint */ Integer getValue(); /** * 获取枚举名称 * @return */ String getName(); } 枚举类 @Getter public enum TestEnum implements BaseEnum { TEST1("name1",1
  • 有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回。 示例: 枚举 /** * @Author: JCccc * @Description: * @Date: Create in 10:51 2021...
  • 讲真,java的枚举类提供的方法太少了,Enum只有两个valueOf可以搞,如果碰上需要传入枚举类型的值,获取枚举类对象或者枚举类型名称的时候,只能干瞪眼,或者循环比对。最近项目就遇到这种,而且感觉以后以及别人都...
  • 我们知道在JAVA编写一个枚举类之后,在调用时系统就会自动给它生成一个values()的数组,通过这个数组就可按索引获取枚举值 但是如果我们声明的是一个枚举的范型类呢?我们知道所有JAVA枚举类,其实都是继承Enum类...
  • Java中如何获取枚举的长度

    千次阅读 2018-01-14 21:43:59
    就像enum StepEnum {a,b,c,d},我想获得StepEnum的长度,可以通过StepEnum.values().length获得,具体使用实例: Set&lt;String&gt; stepSet = new HashSet&lt;String&gt;(StepEnum.values()....
  • java通过反射获取枚举对象

    万次阅读 2017-10-20 13:51:25
    可以通过java的反射机制来获取代码如下 Class<?> onwClass = Class.forName("com.cheshangma.operation.common.enums." + typeName);//这里的typeName就是枚举对象的名称,是需要写全路径的,注意小数点别少
  • java反射之获取枚举对象

    千次阅读 2018-05-16 11:25:08
    java反射之获取枚举对象项目导入大量枚举对象,用来定义常量。随着带来一个问题,就是每个枚举类都需要通过key来获取对应枚举的需求。 1 public enum ExamType { 2 CRAFT(1, "草稿"), 3 PASSING(2, &...
  • Java枚举

    千次阅读 2017-05-03 09:23:36
    Java之枚举 枚举定义 枚举与全局常量的区别 枚举特性,获取枚举对象的方法 枚举实例
  • Java中如何获取枚举常量括号里的值

    千次阅读 2020-07-10 15:15:59
    我一开始百度的是 Mybatis 如何处理Java中枚举数据,参考了好多博客,还写了一个 Mybatis 自定义转换类型的类来进行转换,最终依然无法解决。 终于在今天,历时1天半,我找到了根本问题并且解决了这个问题。枚举类...
  • java如何通过反射获取枚举对象

    千次阅读 2018-12-27 09:18:36
    // 获取所有常量 Object [ ] objects = clzz . getEnumConstants ( ) ; //获取指定方法 Method coinAddressAddress = clzz . getMethod ( "getAddress" ) ; Method coinAddressCode = clzz . ...
  • Java随机获取枚举类的值,获取的枚举值可以根据最大值,最小值来控制 public static <T extends Enum<?>> T randomEnum(Class<T> clazz, Integer min, Integer max) { Random random = new Random(); if (min > ...
  • 首先定义枚举 [code="java"] public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } [/code] 测试代码如下: [code="java"] public class TestColor { public static void...
  • 枚举规范写法 如下枚举,粘贴整个枚举,直接修改字段,其他方法不用修改。 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** 功能说明:订单状态枚举类 @...
  • 深入理解Java枚举类型(enum)

    万次阅读 多人点赞 2017-05-13 18:27:14
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ... 出自【zejian的博客】 关联文章: 深入理解Java类型信息...深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • 说我有一个枚举 public enum Blah { A, B, C, D } 我想找到一个字符串的枚举值,例如"A"就是Blah.A 怎么可能做到这一点? Enum.va
  • Java中枚举类型的校验

    千次阅读 2019-09-25 15:58:19
    最近项目用到了一些枚举类,而接口API提供的是String类型来接收,这样的话,调用方随便传什么,如果传的并不是后台定义的枚举类型,那么处理起来肯定会有问题。所以我们需要对调用方传来的枚举进行校验。 简单...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,337
精华内容 44,934
关键字:

java获取枚举中所有

java 订阅