新增了一个简化枚举定义的接口和一个简化访问操作的类:IEnum
和IEnumAccessor
。
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;
}
}
}
网友评论