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

2020-03-16  本文已影响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;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读