枚举的转换怎么做

本文详细解析了枚举类型转换的两种形式:隐式转换和显式转换。阐述了0可以转为任意枚举类型且不抛出错误,并通过实例展示了枚举到字符串的转换过程,利用System.Enum的IFormattable接口实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

•       隐式转换
       0 可以转为任一 enum类型
       从不抛出错误
•       显式转换
       从enum 到enum 通过内在类型转换
       从enum 转为数值类型(包括char)
       从数值类型(包括char) 转为 enum
       从不抛出错误
0可以被转为任一enum类型,不管enum类型包不包括0。
如果你使用Console.WriteLine显视一个枚举值,它好像被隐式转换为一个字符串。但这是一种错觉,下面的例子说明了这一点:
   enum Suit { Clubs, Diamonds, Hearts, Spades }
   Suit trumps = Suit.Clubs;
   Console.WriteLine(trumps);//显视为Clubs
   string s = trumps;//错误,trumps不是字符串
Console.WriteLine完成的从enum到string 的类型转换是通过System.Enum的IFormattable接口实现的。
MyBatis-Plus 是 MyBatis 的一个增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在使用 MyBatis-Plus 时,可以实现枚举类型与数据库中字段的自动转换,通常通过自定义枚举转换器来实现。 1. 创建枚举类,定义枚举常量以及对应的数据库存储值。 2. 实现 `IEnum` 接口(如果使用的 MyBatis-Plus 版本是 3.1.2 之后的版本,则需要实现 `IEnum` 接口的泛型版本 `IEnum<T>`),并重写 `getValue()` 方法返回枚举对应的数据库值。 3. 实现 `TypeHandler` 接口,在 `setParameter` 方法中处理如何将枚举类型转换为数据库能够存储的值,在 `getResult` 方法中处理如何将数据库值转换枚举类型。 下面是一个简单的示例: ```java public enum SexEnum implements IEnum<Integer> { MAN(1, "男"), WOMAN(2, "女"); private int value; private String desc; SexEnum(int value, String desc) { this.value = value; this.desc = desc; } @Override public Integer getValue() { return value; } // 这里还可以根据需要添加其他方法,比如根据描述获取枚举值等。 } ``` 然后注册枚举转换器: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 添加枚举转换器插件 interceptor.addInnerInterceptor(new EnumMateTypeHandler()); return interceptor; } } // 枚举转换器示例 public class EnumMateTypeHandler<E extends IEnum<?>> extends BaseTypeHandler<E> { private Class<E> type; public EnumMateTypeHandler(Class<E> type) { if (type == null) { throw new IllegalArgumentException("Type argument cannot be null"); } this.type = type; } @Override public void setParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException { if (parameter == null) { ps.setNull(i, Types.VARCHAR); } else { ps.setString(i, String.valueOf(parameter.getValue())); } } @Override public E getResult(ResultSet rs, String columnName) throws SQLException { int value = rs.getInt(columnName); return rs.wasNull() ? null : (E) IEnum.valueOf(type, value); } @Override public E getResult(ResultSet rs, int columnIndex) throws SQLException { int value = rs.getInt(columnIndex); return rs.wasNull() ? null : (E) IEnum.valueOf(type, value); } @Override public E getResult(CallableStatement cs, int columnIndex) throws SQLException { int value = cs.getInt(columnIndex); return cs.wasNull() ? null : (E) IEnum.valueOf(type, value); } } ``` 在实际使用中,可能还需要根据具体的数据库连接和版本进行一些微调。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值