`
ckwn
  • 浏览: 69476 次
  • 性别: 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
分享到:
评论

相关推荐

    Enum的用法

    2. **自定义方法与变量**:`Enum`不仅限于简单的枚举值,还可以像普通类那样定义方法和变量。例如,在`Color`枚举类型中添加一个方法来随机返回一个颜色,甚至可以定义静态变量来存储枚举值的数量,如: ```java ...

    swift-SwiftNotes-围绕NotificationCenter的一个超级简单封装

    `SwiftNotes`项目提供了一个针对`NotificationCenter`的超级简单封装,旨在简化使用过程,提高代码的可读性和可维护性。 首先,`NotificationCenter`的基本用法是在一个对象中注册监听器(observer),然后在其他...

    Laravel开发-laravel-enum

    `laravel-enum` 包引入了枚举类型的概念,它允许我们将这些固定的值封装在类中,提供了更安全、可读性更强的解决方案。 **二、安装与配置** 首先,你需要通过 Composer 来安装 `enum` 包。在终端中运行以下命令: ...

    Enum 放置问题说明代码

    2. **封装性**:将枚举独立出来,可以更好地遵循封装原则。它降低了类之间的耦合度,使得修改枚举的定义不会影响到类的其他部分,更便于维护。 3. **重用性**:如果枚举在类外定义,可以在多个类或多个项目中重用,...

    swift-仿照友盟目录结构对微信QQ微博分享的SDK进行封装

    "swift-仿照友盟目录结构对微信QQ微博分享的SDK进行封装"项目正是为了解决这个问题,提供了一个灵活、可扩展的解决方案。 首先,我们来详细了解一下友盟(Umeng)的目录结构。友盟是中国的一家知名移动互联网统计...

    Java中的枚举类型Enum示例源代码

    总之,Java的枚举类型`Enum`不仅提供了对常量集的封装,还具备了类的所有功能,包括方法、构造函数和继承。它极大地增强了代码的可读性和安全性,是Java开发中的一个重要特性。通过深入理解和熟练应用,可以提高代码...

    C++ 封装的日志类

    enum class LogLevel { DEBUG, INFO, WARN, ERROR }; ``` 3. **构造函数**:接受日志级别和日志文件路径作为参数,用于初始化类的实例。 4. **日志写入函数**:这是核心功能,应该有多个重载版本,支持ASCII和...

    Java Enum的简单使用

    此外,在业务逻辑管理方面,合理使用Enum可以很好地封装业务逻辑,使得代码更加模块化,从而提升代码的可维护性。 综上所述,Java Enum作为Java语言中一个重要的特性,它不仅简化了代码的编写,还极大地提升了代码...

    swift-SwiftiOS:一个简陋的TableView封装

    10. **Swift特性**:考虑到是Swift语言实现,项目可能利用了Swift的一些特性,如枚举(enum)来表示Cell类型,可选链(Optional Chaining)来简化代码,或者泛型(Generics)来提高代码的复用性。 通过这样的封装,...

    Reachability 网络状态的使用和封装,更加方便使用

    我们可以创建一个网络管理类 NetworkManager,将 Reachability 的功能包装在其中,提供简单易懂的方法,如检查当前网络状态: ```swift enum NetworkStatus { case notReachable case reachableViaWiFi case ...

    ios-简单封装跑马灯Label.zip

    本教程将详细讲解如何简单封装一个跑马灯Label,并方便地在项目中进行调用。 首先,我们需要创建一个新的Swift文件,比如命名为`ScrollLabel.swift`,来作为自定义跑马灯Label的类。这个类将继承自`UILabel`,以便...

    protobuf枚举和包的使用

    下面是一个简单的protobuf枚举定义示例: ```protobuf enum Color { RED = 0; GREEN = 1; BLUE = 2; } ``` 在这个例子中,`Color`是一个枚举类型,包含了三个值:`RED`、`GREEN`和`BLUE`,分别对应整数值0、1和2...

    深入谈谈java的枚举(enum)类型

    以下是一个简单的枚举例子: ```java public enum Color { RED, GREEN, BLUE } ``` 这个例子中,`Color`是一个枚举类型,包含三个常量:`RED`、`GREEN`和`BLUE`。枚举类型是不能被继承的,因为它们被声明为`final...

    Java封装统一的Result Model案例

    本文主要介绍了 Java 封装统一的 Result Model 案例,具有很好的参考价值,希望对大家有所帮助。在开发过程中,有时候会需要使用错误码+错误信息的形式,来返回某些业务操作的错误结果信息,来代替效率较低的异常...

    swift-类型安全用户默认值-SwiftyNSUserDefaults封装

    然而,原生的NSUserDefaults API在使用时可能存在类型不安全的问题,因为它依赖于键值对的方式来存储和检索数据,这可能导致在处理不同类型的数据时出现潜在错误。为了解决这个问题,开发者们通常会封装一个更加类型...

    enumjs:在 Javascript 中轻松创建枚举

    总的来说,`enumjs`使得在JavaScript中处理枚举变得简单且易于理解,提升了代码的可读性和一致性。虽然`gen_enum`曾经是创建枚举的一个选项,但鉴于其已被废弃,建议使用`enumjs`等更新的库来满足枚举的需求。

    c++ 尽量不要使用#define 而是用const、enum、inline替换。

    与宏相比,`inline`函数保持了函数的封装性和类型安全性,且支持编译器进行优化。例如: ```cpp template inline T Max(const T& a, const T& b) { return a &gt; b ? a : b; } ``` 4. `const`和`static`成员: ...

    swift-用RXSwift写的登陆及第三方登陆MMVV框架以及Alamofire请求部分的封装面向协议和枚举

    枚举(Enum)在Swift中是一个强大的类型,它可以表示一组相关的值。在这里,可能用于表示不同的登录状态(例如,未登录、正在登录、登录成功、登录失败等),或者第三方登录的不同提供商(如Facebook、Google等)。...

    Android自定义封装banner组件

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

Global site tag (gtag.js) - Google Analytics