enum的使用和分析

enum代表一组相同类型的常量。
实例:
package util;

public enum TYPE {
//定义邮件服务器常量,必须添加对应的构造方法
SMTP_126("smtp.126.com"),SMTP_TNICE("smtp.tnice.qq.com"),SMTP_163("smtp.163.com");

private final  String smtpType;

/**
* 构造函数
* @param smtpType 服务器类型值
*/
private TYPE(final String smtpType){
this.smtpType = smtpType;
}
//返回服务器对应的值
public String getValue(){
return this.smtpType;
}

public void guessValue(TYPE type){
switch(type){
case SMTP_126:System.out.println(type.getValue());break;
case SMTP_TNICE:System.out.println(type.getValue());;break;
case SMTP_163:System.out.println(type.getValue());;break;
default:System.out.println("传的类型不匹配");
}
}

//测试
public static void main(String[] args) {
for(TYPE type:TYPE.values()){
System.out.println("直接打印:"+type);
System.out.println("DeclaringClass:"+type.getDeclaringClass());
System.out.println("常量对应的value:"+type.getValue());
type.guessValue(type);

}
}
}
最后一个的输出结果:
smtp.tnice.qq.com
直接打印:SMTP_163
DeclaringClass:class util.TYPE
常量对应的value:smtp.163.com
smtp.163.com

注:经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>.
SMTP_126反编译后都是final类型的静态常量。因此可以通过枚举类直接调用。打印出的就是该值本身。
所以实际上Enum类型就是以Java类来实现的,没有什么新的特点,只不过java编译器帮我们做了语法的解析和编译。完全也可以自己实现。但是既然有这样方便一个东西,当然会去用了。

猜你喜欢

转载自jameszhao1987.iteye.com/blog/1254064
今日推荐