`
ckwn
  • 浏览: 69005 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

对enum简单的封装

 
阅读更多

接口:

public interface IPersistentEnum<T> {

	T getKey();
	
	String getValue();
}

 工具类:

public final class PersistentEnum {

	/**
	 * 
	 * @param <T>
	 * @param <V>
	 * @param clazz
	 * @param value
	 * @return
	 */
	public static <T extends Enum<T> & IPersistentEnum<V>, V> T parse(Class<T> clazz, V key) {
		for (T t : clazz.getEnumConstants()) {
			if (isEquals(t.getKey(), key)) {
				return t;
			}
		}
		return null;
	}

	private static <T> boolean isEquals(T lhs, T rhs) {
		if (lhs == null && rhs == null) {
			return true;
		} else if (lhs == null || rhs == null) {
			return false;
		} else {
			return lhs.equals(rhs);
		}
	}
}

 

Enum example:

public enum ESex implements IPersistentEnum<Integer> {
	
	MEN(1,"男"),WOMAN(0,"女");
	
	private int key;
	
	private String value = null;
	
	private ESex(Integer key, String value) {
		this.key = key;
		this.value = value;
	}

	@Override
	public String getValue() {
		return value;
	}

	@Override
	public Integer getKey() {
		return key;
	}
	
	public static ESex parse(int key) {
		return PersistentEnum.parse(ESex.class, key);
	}

}
 

 Test:

public class ESexTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String sex1 = PersistentEnum.parse(ESex.class, 1).getValue();
		System.out.println(sex1);
		//如果枚举里写了parse静态方法可以直接使用
		String sex2 = ESex.parse(1).getValue();
		System.out.println(sex2);
	}

}
 

输出结果:

 

 

 

4
4
分享到:
评论

相关推荐

    Android自定义封装banner组件

    一个简单方便的轮播图组件,基于viewpager 基础上进行的封装。 可设置 项目中图片,网络图片, View; 支持循环自动播放,手势滑动切换,item点击事件,可设置 点点的样式宽高、颜色、大小、位置 ; 可设置蒙层;可...

    基于 C++ C0 文法的简易编译器【100010116】

    程序采用 C++ 语言编写,使用简单的面向对象方法封装了各个阶段: ·共计 6 个类:Lexer、Parser、Code、MIPS、Error、Table ·另有两个枚举类(Enum):symbol 和 kind ·另有两个结构:token 和 record ·另有三个...

    ios-两个ImageView实现轮播图(多种动画效果)(可以加载本地图片、网络图片).zip

    已经封装成工具类,简单实用,耦合性低,并且包含多种动画效果,可自定义。 typedef NS_ENUM(NSInteger,LZBFocusScrollViewScrollStyle) { LZBFocusScrollViewScrollStyle_Defalut, //默认普通滚动 ...

    JAVA面向对象详细资料

    39.6 使用简单工厂将创建对象代码单独的封装的好处? 64 39.7 使用常量优化工厂类 64 39.8 测试类 65 40 枚举(enum) 65 40.1 创建一个枚举 66 40.2 为枚举创建实例 66 40.3 如何使用枚举的实例 66 40.4 使用枚举...

    IBNetworking:IBNetworking是一个由Swift编写的HTTP网络库,受Moya启发,基于URLSession

    IBNetworking 1.0.0 IBNetwork是一个受Moya启发的基于URLSession的框架,它具有一个网络抽象层,可以充分封装URLSession。 该框架还具有使用Core Data在磁盘上记录请求和响应的功能,对主线程的影响最小(线程安全)...

    Visual C++开发经验技巧宝典(第1章)

    0027 使用enum定义类型 10 0028 定义只有零个元素的数组 11 0029 利用零进行初始化的对象 11 0030 初始化数组的简单方法 11 0031 结构体的字节对齐 11 1.3 模板与函数 12 0032 成员函数的模板不可以是...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    13.1.1 简易需求分析 426 13.1.2 swing组件简介 427 13.1.3 设计主窗口与菜单列 429 13.1.4 关于版面管理 433 13.1.5 事件处理 436 13.2 文档打开、存储与编辑 442 13.2.1 操作打开文档 442 13.2.2 ...

    day020-继承加强和设计模式代码和笔记.rar

    public enum Singleton{ INSTANCE; } 5. 作用: 1. 全局配置文件 2. 全局日志文件 3. 节省资源,例如,回收站、资源管理器、游戏单开窗口 6. 使用选择: ...

    [原创]自己工作中常用的模板库,简化你的工作

    此功能可以把任意多个参数的多元(成员/非成员)函数封装成一个无参数函数,作为简单的回调函数。 ☆ best callback function is non-parameter function. This feature packs multiple-parameter function into one...

    rfc中文文档目录,包含部分翻译

    RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 ...

    语言程序设计课后习题答案

    enum COLOR { WHITE, BLACK = 100, RED, BLUE, GREEN = 300 }; 解: Blue = 102 2-7 注释有什么作用?C++中有哪几种注释的方法?他们之间有什么区别? 解: 注释在程序中的作用是对程序进行注解和说明,以...

    Swifter-Swift 开发者必备 Tips (第四版).zip

    Ole Begemann 在这篇帖子里提到了一种很好封装,这为我们如何借助柯里化,安全地改造和利用 target-action 提供了不少思路。 protocol TargetAction { func performAction() } struct TargetActionWrapper...

    vc++ 应用源码包_1

    IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 IP所在地查询器 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习界面的好实例,强烈...

    vc++ 应用源码包_2

    IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 IP所在地查询器 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习界面的好实例,强烈...

    vc++ 应用源码包_6

    IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 IP所在地查询器 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习界面的好实例,强烈...

    vc++ 应用源码包_5

    IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 IP所在地查询器 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习界面的好实例,强烈...

    vc++ 应用源码包_3

    IOCP封装类(DLL)发布 主要是CIocpSrv"伪类",实际上还是调用的DLL, IOCP完成端口 IP所在地查询器 jpeglib_demo 处理Jpeg图片。 KeyHook 键盘钩子,截获键盘信息。 Kugou7+UI 界面设计。学习界面的好实例,强烈...

    亮剑.NET深入体验与实战精要2

    12.1.5 项目示例:开发一个简单的WPF应用程序 424 12.2 WCF 427 12.2.1 SOA是什么 427 12.2.2 WCF是什么 428 12.2.3 WCF的优势是什么 428 12.2.4 WCF开发环境 431 12.2.5 项目示例:订票服务WCF开发步骤 431 12.3 ...

Global site tag (gtag.js) - Google Analytics