美文网首页
新增了一个简化枚举定义的接口和一个简化访问操作的类

新增了一个简化枚举定义的接口和一个简化访问操作的类

作者: 吃竹子的程序熊 | 来源:发表于2020-03-16 20:29 被阅读0次

    新增了一个简化枚举定义的接口和一个简化访问操作的类:IEnumIEnumAccessor

    public interface IEnum {
    
        /**
         * 可读性名称
         */
        String getName();
    
        /**
         * 编码
         */
        Integer getCode();
    }
    
    /**
     * IEnum实体访问类
     *
     *
     * @author HanQi [Jpanda@aliyun.com]
     * @version 1.0
     * @since 2019/12/13 17:13
     */
    public final class IEnumAccessor {
    
        @SuppressWarnings({"unchecked", "rawtypes"})
        public static <T extends Enum & IEnum> T of(String name, Class<T> clazz) {
            // 获取所有枚举数据
            IEnum[] enums = clazz.getEnumConstants();
            Optional<IEnum> optional = Stream.of(enums).filter((v) -> v.getName().equals(name)).findFirst();
            return (T) optional.orElse(null);
    
        }
    
        @SuppressWarnings({"unchecked", "rawtypes"})
        public static <T extends Enum & IEnum> T of(Integer code, Class<T> clazz) {
            // 获取所有枚举数据
            IEnum[] enums = clazz.getEnumConstants();
            Optional<IEnum> optional = Stream.of(enums).filter((v) -> v.getCode().equals(code)).findFirst();
            return (T) optional.orElse(null);
    
        }
    }
    
    
    /**
     * @author HanQi [Jpanda@aliyun.com]
     * @version 1.0
     * @since 2019/12/13 17:35
     */
    public class IEnumAccessorTest {
    
        @Test
        public void of() {
            assert IEnumAccessor.of("第一个", IEnumImpl.class).getCode() == 1;
            assert IEnumAccessor.of("第二个", IEnumImpl.class).getCode() == 2;
            assert IEnumAccessor.of(1, IEnumImpl.class).getName().equals("第一个");
            assert IEnumAccessor.of(2, IEnumImpl.class).getName().equals("第二个");
            assert IEnumAccessor.of(3, IEnumImpl.class) == null;
            assert IEnumAccessor.of("第三个", IEnumImpl.class) == null;
        }
    
    
        enum IEnumImpl implements IEnum {
            FIRST("第一个", 1),
            SECOND("第二个", 2);
            private String name;
            private Integer code;
    
            IEnumImpl(String name, Integer code) {
                this.name = name;
                this.code = code;
            }
    
            /**
             * 可读性名称
             */
            @Override
            public String getName() {
                return this.name;
            }
    
            /**
             * 编码
             */
            @Override
            public Integer getCode() {
                return this.code;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:新增了一个简化枚举定义的接口和一个简化访问操作的类

          本文链接:https://www.haomeiwen.com/subject/jlvoehtx.html