精华内容
下载资源
问答
  • Java1.5提供了关键字enum,能够通过该关键字方便得定义自己须要的枚举类型,比方  enum Season {  SPRING, SUMMER, AUTUMN, WINTER  }  定义了一个季节枚举类型。  在本例中,对于Season.SPRING这个...
  • Genum是从YAML数组生成Java枚举类文件的代码生成器。 您可以在服务器端和客户端应用程序之间共享定义! 例如,这是一个以YAML格式编写的数组。 - Tokyo - NewYork - London - Beijing - Paris - Roma Genum将其...
  • java枚举自动转换

    2021-10-09 17:35:21
    目录前后端交互枚举转换get请求(参数放url)post请求(参数放body)后端与数据库交互枚举转换 前后端交互枚举转换 get请求(参数放url) 提供两个接口,分别处理以code(int类型)和name(String类型)进行转换的...

    前后端交互枚举转换

    get请求(参数放url)

    提供两个接口,分别处理以code(int类型)和name(String类型)进行转换的枚举

    public interface IFeIntegerEnum {
    	
    	int getCode();
    
    	static <E extends Enum<?> & IFeIntegerEnum> Optional<E> codeOf(Class<E> enumClass, int value) {
    		return Arrays.stream(enumClass.getEnumConstants()).filter(e -> e.getCode() == value).findAny();
    	}
    }
    
    public interface IFeStringEnum {
    	
    	int getName();
    
    	static <E extends Enum<?> & IFeStringEnum> Optional<E> codeOf(Class<E> enumClass, String name) {
    		return Arrays.stream(enumClass.getEnumConstants()).filter(e -> e.getName().equals(name)).findAny();
    	}
    }
    

    然后需要两个枚举转换工厂

    @Component
    public class IntegerToEnumConvertFactory implements ConverterFactory<String, IFeIntegerEnum> {
    	
    	@Override
    	@Nonnull
    	public <T extends IFeIntegerEnum> Converter<String, T> getConverter(@Nonnull Class<T> targetType) {
    		return new IntegerToEnum(targetType);
    	}
    
    	private static class IntegerToEnum<T extends Enum<T> & IFeIntegerEnum> implements Converter<String, T> {
    		
    		private final Class<T> type;
    
    		public IntegerToEnum(Class<T> type) {
    			this.type = type;
    		}
    	
    		@Override
    		public T convert(@Nonnull String source) {
    			return IFeIntegerEnum.codeOf(this.type,Integer.parseInt(source)).orElseThrow(IllegalArgumentException::new);
    		}
    	}
    }
    
    @Component
    public class StringToEnumConvertFactory implements ConverterFactory<String, IFeStringEnum> {
    	
    	@Override
    	@Nonnull
    	public <T extends IFeStringEnum> Converter<String, T> getConverter(@Nonnull Class<T> targetType) {
    		return new StringToEnum(targetType);
    	}
    
    	private static class StringToEnum<T extends Enum<T> & IFeIntegerEnum> implements Converter<String, T> {
    		
    		private final Class<T> type;
    
    		public StringToEnum(Class<T> type) {
    			this.type = type;
    		}
    	
    		@Override
    		public T convert(@Nonnull String source) {
    			return IFeStringEnum.codeOf(this.type,source).orElseThrow(IllegalArgumentException::new);
    		}
    	}
    }
    

    还需要在WebMvcConfigurer中配置下

    @Configuration
    public class WebConfiguration implements WebMvcConfigurer {
    		
    		@Override
    		public void addFormatters(FormatterRegistry registry) {
    			registry.addConverterFactory(integerToEnumConvertFactory);
    			registry.addConverterFactory(stringToEnumConvertFactory);
    		}
    }
    

    最后如何看下实际使用

    public enum LolEnum implements IFeIntegerEnum,IFeStringEnum { 
    
    	Q(0,"q技能"),
    	W(1,"w技能"),
    	E(2,"e技能"),
    	R(3,"r技能");
    	
    	private final int code;
    	
    	private final String name;
    
    	LolEnum (int code,String name){
    		this.code = code;
    		this.name = name;
    	}
    	
    	@Override
    	public int getCode(){
    		return code;
    	}
    
    	@Override
    	public int getName(){
    		return name;
    	}
    }
    

    则此时无论前端传0,1,2,3还是qwer技能到后端,后端用此枚举都能正常转换,注意这是传参放url的形势,比较麻烦,如果放body就很简单了

    post请求(参数放body)

    此时可以用json工具自动处理,以jackson为例,直接用@JsonCreator和@JsonValue即可

    public enum LolEnum { 
    
    	Q(0,"q技能"),
    	W(1,"w技能"),
    	E(2,"e技能"),
    	R(3,"r技能");
    	
    	private final int code;
    	
    	private final String name;
    
    	LolEnum (int code,String name){
    		this.code = code;
    		this.name = name;
    	}
    	
    	/**
    	 * 前端传参反序列化为枚举
    	 */
    	@JsonCreator
    	public static LolEnum valueOfCode(int code ) {
    		return Arrays.stream(LolEnum.values()).filter(item -> item.getCode() == code).findFirst().orElseThrow(IllegalArgumentException::new);
    	}
    	
    	/**
    	 * 序列化到前端时返回数字,同理加到getName上则返回字符串
    	 */
    	@JsonValue
    	public int getCode(){
    		return code;
    	}
    
    	public int getName(){
    		return name;
    	}
    }
    

    后端与数据库交互枚举转换

    public interface IDBIntegerEnum {
    	
    	int getCode();
    
    	static <E extends Enum<?> & IDBIntegerEnum> Optional<E> codeOf(Class<E> enumClass, int value) {
    		return Arrays.stream(enumClass.getEnumConstants()).filter(e -> e.getCode() == value).findAny();
    	}
    }
    
    @MappedTypes(IDBIntegerEnum.class)
    @MappedJdbcTypes(JdbcType.INTEGER)
    public class IntegerEnumTypeHandler<E extends Enum<?> & IDBIntegerEnum> extends BaseTypeHandler<E> {
    
    	private final Class<E> type;
    
    	public IntegerEnumTypeHandler(Class<E> type) {
    		if(type == null){
    			throw new IllegalArgumentException("Type argument cannot be null");
    		}
    		this.tyoe = type;
    	}
    
    	/**
    	 * 用于定义在Mybatis设置参数时该如何把Java类型参数转换为对应的数据库类型
    	 * 
    	 * @param ps 当前PreparedStatement对象
    	 * @param i 当前参数的位置
    	 * @param parameter 当前参数的Java对象
    	 * @param jdbcType 当前参数的数据库类型
    	 */
    	 @Override
    	 public void setNonNullParameter(PreparedStatement ps,int i,E parameter,JdbcType jdbcType) throws SQLException {
    		ps.setInt(i,parameter.getCode());
    	}
    
    	/**
    	 * 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的java类型
    	 * 
    	 * @param rs 当前的结果集
    	 * @param columnName 当前的字段名称
    	 * @return 转换后的java对象
    	 */
    	 @Override
    	 public E getNullableResult(ResultSet rs,String columnName) throws SQLException {
    		int columnValue = rs.getInt(columnName);
    		return rs.wasNull()?null:enumOf(columnValue);
    	}
    
    	/**
    	 * 用于在Mybatis通过字段位置获取数据结果集时如何把数据库类型转换为对应的java类型
    	 * 
    	 * @param rs 当前的结果集
    	 * @param columnIndex 当前的字段位置
    	 * @return 转换后的java对象
    	 */
    	 @Override
    	 public E getNullableResult(ResultSet rs,int columnIndex) throws SQLException {
    		int columnValue = rs.getInt(columnIndex);
    		return rs.wasNull()?null:enumOf(columnValue);
    	}
    
    	/**
    	 * 用于在Mybatis在调用存储过程后把数据库类型转换为对应的java类型
    	 * 
    	 * @param cs 当前CallableStatement
    	 * @param columnIndex 当前的字段位置
    	 * @return 转换后的java对象
    	 */
    	 @Override
    	 public E getNullableResult(CallableStatement cs,int columnIndex) throws SQLException {
    		int columnValue = cs.getInt(columnIndex);
    		return rs.wasNull()?null:enumOf(columnValue);
    	}
    
    	private E enumOf(int value){
    		return IDBIntegerEnum.codeOf(type,value).orElseThrow(()->new IllegalArgumentException("Cannot convert "+value+" to "+type.getSimpleName()+" by code value."));
    	}
    
    }
    
    展开全文
  • } 调用 TestEnum test = TestEnum .of(1)) 如果字段名即,如: public enum TestEnum2 { TEST21("TEST21"), TEST22("TEST22"), TEST23("TEST23"), TEST24("TEST24"); private String type; private TestEnum2...
    public enum TestEnum {
        TEST1(1),
        TEST2(2),
        TEST3(3),
        TEST4(4),
        TEST5(5);
    
        private int type;
    
        private TestEnum (int type) {
            this.type = type;
        }
    
        public int getType() {
            return this.type;
        }
    
        public static TestEnum of(int typeValue) {
            TestEnum [] var1;
            int var2 = (var1 = values()).length;
    
            for(int var3 = 0; var3 < var2; ++var3) {
                TestEnum type;
                //字符串对应的改成equals
                if ((type = var1[var3]).getType() == typeValue) {
                    return type;
                }
            }
    
            return null;
        }

    调用

    TestEnum test = TestEnum .of(1))

    如果字段名即值,如:

    public enum TestEnum2 {
        TEST21("TEST21"),
        TEST22("TEST22"),
        TEST23("TEST23"),
        TEST24("TEST24");
        private String type;
        private TestEnum2(String type){
            this.type = type;
        }
        public String getType(){
            return type;
        }
    }
    

    可以使用获取

    TestEnum2 test = Enum.valueOf(TestEnum2.class,"TEST21");//需要try{}catch()

    也可以根据name获取第一种的值

    Enum.valueOf(TestEnum.class,"TEST1").getType();// 1

     

    展开全文
  • Java enum枚举 数据转换

    2020-05-13 20:16:40
    //枚举类 package com.middol.supplieraudit.enums; public enum AuditStatusEnums { DFP(0,"待分配"), DSH(1,"待审核"), YSH(2,"已审核"); private Integer value; private String msg; AuditStatusEnums...
    //枚举类
    
    public enum AuditStatusEnums {
        DFP(0,"待分配"),
        DSH(1,"待审核"),
        YSH(2,"已审核");
    
        private Integer value;
        private String  msg;
    
         AuditStatusEnums(Integer value,String msg){
             this.value = value;
             this.msg = msg;
         }
    
        public Integer getValue() {
            return value;
        }
    
        public void setValue(Integer value) {
            this.value = value;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        @Override
        public String toString(){
             return msg;
        }
        //获取枚举实例
        public static AuditStatusEnums fromValue(Integer value) {
            for (AuditStatusEnums val : values()) {
                if (val.getValue().equals(value)) {
                    return val;
                }
            }
            throw new IllegalArgumentException();
        }
    
        //获取枚举实例
        public static AuditStatusEnums fromMsg(String msg) {
            for (AuditStatusEnums val : values()) {
                if (val.getMsg().equals(msg)) {
                    return val;
                }
            }
            throw new IllegalArgumentException();
        }
    
    }
    

    //转换的工具类实现AttributeConverter接口

    
    import javax.persistence.AttributeConverter;
    
    public class EnumConvert implements AttributeConverter<String,Integer>{
        @Override
        public Integer convertToDatabaseColumn(String attribute) {
            try {
                Integer val = Integer.parseInt(attribute);
                return AuditStatusEnums.fromValue(val).getValue();
            }catch (NumberFormatException e){
                return AuditStatusEnums.fromMsg(attribute).getValue();
            }
        }
    
        @Override
        public String convertToEntityAttribute(Integer dbData) {
            return AuditStatusEnums.fromValue(dbData).getMsg();
        }
    }
    

     

    在实体类中定义属性

    给属性添加@Convert(converter = EnumConvert.class)

    @Convert(converter = EnumConvert.class)
    @Column(name = "auditStatus")
    private String  auditStatus;
    展开全文
  • java 枚举和数值的相互转换

    千次阅读 2017-05-04 18:07:00
    枚举简介 enum 的全称为 enumeration, 是 JDK 1.5 中引入的...此时枚举可以很方便的表示这样的简单的数据集 枚举和数值的相互转化 步骤:  1.首先定义一个枚举类:例如atEnum  2.在枚举类中创建一个枚举构造...

    枚举简介

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

    此时枚举可以很方便的表示这样的简单的数据集

    枚举和数值的相互转化

    步骤:

      1.首先定义一个枚举类:例如atEnum

      2.在枚举类中创建一个枚举构造方法:private atnum(int value)

      3.创建将枚举值转换成数值的的方法:

      4创建将数值转换成对应的枚举值

     

    public class Test01 {
    
        public static void main(String[] args) {
            System.out.println(atEnum.b.enumToInt()); //输出枚举值b对应的数字
            System.out.println(atEnum.intToEnum(1)); //输出1对应的枚举值
        }
        private enum atEnum{//定义一个枚举类
            a(0),b(1),c(2),d(3),e(4);
            
            private int value;
            
            private atEnum(int value){//编写枚举的构造函数,这里的构造方法只能是私有的
                this.value=value;
            }
            
            public static atEnum intToEnum(int value) {    //将数值转换成枚举值
                switch (value) {
                case 0:
                    return a;
                case 1:
                    return b;
                case 2:
                    return c;
                case 3:
                    return d;
                case 4:
                    return e;
                default :
                    return null;
                }
            }
             public int enumToInt() { //将枚举值转换成数值
                    return this.value;
              }
        }
    }

    利用枚举的方法转换成int数值:枚举所对应的下标值

    创建枚举类:

    private static enum color{
            red,blue,yellow,green
        }

    枚举方法ordinal()   返回结果int类型

    public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            System.out.println("red=========="+color.red.ordinal());
            System.out.println("blue=========="+color.blue.ordinal());
            System.out.println("yellow=========="+color.yellow.ordinal());
            System.out.println("green=========="+color.green.ordinal());
        }

    运行结果   如图

    转载于:https://www.cnblogs.com/kuoAT/p/6808568.html

    展开全文
  • 主要介绍了java自定义枚举转换器示例,需要的朋友可以参考下
  • java枚举运用—对象指定字段格式转换 最近需要把对象中的指定字段加上符号,比如温度这个字段,我在对象中用的Integer去存储,但是现在返回给前端需要找此字段 后面加上单位(如19.8℃)。这样的加上单位的话,...
  • Java 遍历枚举值

    万次阅读 2020-09-19 09:18:46
    Java 遍历枚举值 枚举Java中数据类型,用于将一组预定义常量赋给变量。本文介绍几种方式遍历枚举值。 1. 定义枚举 首先我们定义枚举简单示例如下: public enum DaysOfWeekEnum { SUNDAY, MONDAY, TUESDAY, ...
  • Java 枚举转换为JSON

    千次阅读 2019-07-01 15:00:01
    枚举类a public enum a { enum1("名字", "性别"); enum2("名字","性别"); enum3("名字","性别"); private a(String name, String sex) { this.name = name; t...
  • java枚举类型enum与整数的转换

    万次阅读 2017-03-16 14:29:45
    java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用。枚举类型相当于数据库中字典表,但是枚举只有字典表的,缺少其他用来表示和一一对应的字段,当我们在数据库中保存一个...
  • 文章目录1 K,V枚举转换器2 属性与枚举转换器3 使用样例 1 K,V枚举转换器 当枚举为K,V模式的时候,通过K,V获取对应的枚举对象需要继承BaseEnum import java.util.Arrays; import java.util.List; import java....
  • Java枚举和C枚举的转换——JNI笔记

    千次阅读 2019-04-18 20:05:45
    前言 最近在做中间件相关,遇到一个JAVA和C之间枚举通过JNI传递的问题。我们知道C语言的枚举型是一个集合,其每...Java枚举和C枚举的转换本质是Java枚举类型和int整型的转换。 两种枚举的特点 新创建的枚...
  • JAVA枚举操作(获取,转map集合)

    千次阅读 2019-05-15 18:24:24
    JAVA枚举相对来说比.NET的枚举功能强大,感觉就像是一种简化版的类对象,可以有构造方法,可以重载,可以继承接口等等,但不能继承类,JAVA枚举在实际开发中应用相当频繁,以下几个封装方法在实际开发中可能用到,...
  • 框架SpringBoot MyBatis TypeHandler 主要使用mybatis中的TypeHandler接口 ...在java中使用如下枚举: public enum Status { DELETED(-1, "已删除"), NORMAL(1, "正常"); private final i...
  • 在SpringBoot 项目中实现枚举转换,需要创建BaseEnumTypeHandler 类继承BaseEnum 和 BaseTypeHandler 等相关类。想要详细了解如何实现枚举转换的话,那你快点下载后深入理解吧!
  • Java –比较枚举值

    千次阅读 2020-06-04 12:15:37
    Java枚举示例 语言.java package com.mkyong.java public enum Language { JAVA, PYTHON, NODE, NET, RUBY } 2.与==比较 将枚举与==运算符进行比较的示例。 Test.java pa...
  • springboot--mybatis枚举自动转换实现--请配合文章使用,效果更佳,枚举的反复横跳,左右横跳,再也不是问题了
  • Set是Java集合类的重要组成部分,它用来存储不能重复的对象。枚举类型也要求其枚举元素各不相同。看起来枚举类型和集合是很相似的。然而枚举类型中的元素不能随意的增加、删除,作为集合而言,枚举类型非常不实用。...
  • 开发背景:在开发过程中遇到需要通过给定的来获取对应的枚举值,如下例枚举类中,需要通过传入"春"来获取SPRING。public 开始尝试通过Enum的内置方法valueOf()获取,使用报错:public 输出:Exception 我们打开...
  • 5.【强制】二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值里不允许使用枚举类型或者包含枚举类型的POJO对象。 网上很多人将此粗暴的理解为不让用枚举,这是错误的。 这个规范只是不让在接口...
  • Java枚举详解

    万次阅读 多人点赞 2019-05-12 23:07:44
    枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男...而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enu...
  • java枚举转集合 枚举集 (Enum Set) In Java, EnumSet extends the AbstractSet and is implemented in the Set interface. This class is the member of the Java Collection Framework and also it can not be ...
  • java 读取枚举类的转成list和map

    千次阅读 2019-06-13 15:45:44
    首先Enum类: public enum RuleTypeEnum { //officeClerk,estimator,administrator,personnel都是国际化的key officeClerk("officeClerk",99), estimator("estimator",1), administrator("administr...
  • 深入理解Java枚举类型(enum)

    万次阅读 多人点赞 2017-05-13 18:27:14
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ... 出自【zejian的博客】 关联文章: 深入理解Java类型信息...深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • 理论上我们不能直接将状态返回给前端,而是要给具体的字段描述,例如,1代表男,2代表女,你在拿到数据的1或者2这种int时,需要告诉前端人员这代表什么,这就显得十分的麻烦,因此需要后端人员做转换的处理。...
  • java枚举类型,整型,字符串之间转换 先说说简单枚举类型,与字符串,整型之间的转换枚举类: public static enum DATA_TYPE { STRING, DATE, NUMBER, UNKNOWN; } 枚举类型转成整型: DATA_TYPE.DATE....
  • 有时候,有一些下拉选择器的数据项,我们采取了枚举的方式简单记录,但是里面的东西多,前端不想写死,需要提供接口返回。 示例: 枚举 /** * @Author: JCccc * @Description: * @Date: Create in 10:51 2021...
  • java枚举类关键字enum,是jdk1.5之后 才有的新类型。java枚举类在类加载的过程会创建自定义的枚举对象,在静态块中进行初始化,枚举适用于一个类的对象个数固定的情况。 1、如何创建一个枚举类?创建一个枚举类就和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,404
精华内容 35,361
关键字:

java枚举简单值转换

java 订阅