当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

java中的枚举(enmu)

发表于: 2012-02-14   作者:g21121   来源:转载   浏览:
摘要: 从jdk1.5开始,java增加了enum(枚举)这个类型,但是大家在平时运用中还是比较少用到枚举的,而且很多人和我一样对枚举一知半解,下面就跟大家一起学习下enmu枚举。先看一个最简单的枚举类型,一个返回类型的枚举: public enum ResultType { /** * 成功 */ SUCCESS, /** * 失败 */ FAIL,

从jdk1.5开始,java增加了enum(枚举)这个类型,但是大家在平时运用中还是比较少用到枚举的,而且很多人和我一样对枚举一知半解,下面就跟大家一起学习下enmu枚举。
先看一个最简单的枚举类型,一个返回类型的枚举:

public enum ResultType {
	
	/**
	 * 成功
	 */
	SUCCESS,
	/**
	 * 失败
	 */
	FAIL,
	/**
	 * 异常
	 */
	EXCEPTION,
	/**
	 * 错误
	 */
	ERROR,
	/**
	 * 无结果
	 */
	NONE;
}

 众所周知枚举中可以定义一些常量,但这些常量岂不是跟普通的常量相同?

public interface ResultType {
	
	/**
	 * 成功
	 */
	public static final String SUCCESS;
	/**
	 * 失败
	 */
	public static final String FAIL;
	/**
	 * 异常
	 */
	public static final String EXCEPTION;
	/**
	 * 错误
	 */
	public static final String ERROR;
	/**
	 * 无结果
	 */
	public static final String NONE;

}

 

1. 第一点不同就是,在现在流行的jdk版本中String型无法switch,据说jdk7已经支持,但是那还不是主流。在flex中switch就支持String型,但是String字符串容易写错,极容易造成不必要的bug。
2. 如果非用String型那就得用大量的if…else…来进行判断,这时选用枚举就非常简单了,况且这个例子才只有几个字段,如果地名,国家等等,维护起来也非常不便。
3. 即时不是String类型,用到的是int型,可以用到switch,那么就会出现一种异常情况,就是switch的case中没有这个int类型,或是int型常量的值错误,前者无论是用接口常量还是枚举类型都会发生,但后者就只会在接口常量中发生。这时我们就不得不拿出大量精力去避免和维护这种情况。然而枚举就不会出错,这就是好处,有简单的方法为什么不用呢?
4. 而且枚举也可以进行赋值,这样就完全可以胜任一些类型匹配,状态匹配等等的情况了。例如:数据库中存储的返回类型对应值是成功1,失败2,异常3,错误4,无结果5.我们就可以在枚举中像下面这样进行赋值:

public enum ResultType {
	
	/**
	 * 成功
	 */
	SUCCESS(1),
	/**
	 * 失败
	 */
	FAIL(2),
	/**
	 * 异常
	 */
	EXCEPTION(3),
	/**
	 * 错误
	 */
	ERROR(4),
	/**
	 * 无结果
	 */
	NONE(5);
	//定义自己的属性,可以是其他类型,例如String,boolean…
	private final int value;

	/**
	 * 采用自定义属性的构造方法
	 */
	ResultType(int value) {
		this.value = value;
	}

	/**
	 * 得到对应值
	 * 
	 * @return the value
	 */
	public int getValue() {
		return value;
	}

}

 

这样我们就可以通过类似于ResultType. SUCCESS.getValue()获取相应类型的值了,这里需要注意的是我们可以定义value的类型为其他类型,如:String,boolean,double…等等。
java.lang. Enum与枚举是什么关系:
我们在读api或源代码的时候会发现java.lang包下有一个Enum类,这个类又是什么呢?

java api 写道
这是所有 Java 语言枚举类型的公共基本类

 

其实枚举类型最终会编译成一个继承了java.lang.Enum的类,所以枚举并没有什么特别之处。

我们看到Enum类中有一些公共的方法,我们常用的有equals,valueOf等。

这个equals我们很熟悉,是String型比较相同字符串时最常用的,但在枚举里该怎么用呢?

boolean s=ResultType.ERROR.equals("ERROR");
System.out.print(s);
//false

 打印出来的结果是不匹配。

boolean s=ResultType.ERROR.equals(ResultType.ERROR);
System.out.print(s);
//true

 结果是相同,说明枚举在比较的时候是在这么用的。

 

valueOf也比较简单,是将对象转换成枚举的方法:

ResultType.valueOf("ERROR");

 

还有一些不太常用的方法,api写的也非常清楚了。

java中的枚举(enmu)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素
通过一段时间的项目实践,发现java中的枚举与.net中的枚举有很大的差别,初期造成了我对java中的枚
为了更好的支持枚举类型,java.util中添加了两个新类:EnumMap和EnumSet。使用它们可以更高效的操作
枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得。使用简单类完成颜色的固定取
转自 〖 作者:中华风筝 〗http://www.java3z.com 在实际编程中,往往存在着这样的“数据集”,它们
为了更好的支持枚举类型,java.util中添加了两个新类:EnumMap和EnumSet。使用它们可以更高效的操作
枚举是限定有限可能值的一种手段,使用枚举可以降低程序出错的几率,并可以提高代码的可读性与可维
枚举是限定有限可能值的一种手段,使用枚举可以降低程序出错的几率,并可以提高代码的可读性与可维
枚举类定义如下: public enum Status { SCUUESS("1", "成功"), FAILED("2", "失败"); private Stri
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号