作者:junsan jin
日期:2005-03-25
邮箱:junsan21@126.com ; junnef21@sohu.com
jsdk5.0中新增了很多的特性,如泛型、增强的循环、改进的装、拆箱、静态引入等,大大增强了java语言的易用性。
我现在正在做一个从com+(dcom)平台到j2ee平台移植的项目,中间有很多枚举类型的定义,以前做起来要引入第三方类库,或者自己写类库,或者干脆定义成静态变量使用,很不方便,而且可能会产生很多问题。jsdk5.0的发布正好解决了这些问题。
这里就枚举的应用举一个小例子说明,相信这样更容易理解java中枚举的用法。
普通无值枚举类型可定义成如下的形式:
private enum mycolor{ red, yellow, blue }
但我们用的时候很多情况下会用到值,所以下面的测试类更能说明java中枚举类型的强大功能,代码如下:
class enumtest
{
private enum mycolor//定义一个mycolor的枚举类型
{
red(1),//定义枚举类型的一个成员
yellow(2),
blue(3);
private final int num;//序号的存储属性,由于序号通常比较稳定不希望被改变,所以声明成final
mycolor(int num) //类似于类构造器的初始化方式,其会自动循环给成员赋值
{
this.num = num;
}
private int getnum()//取得对应成员的序号
{
return num;
}
}
public void showcolor()//暴露给外部的访问接口
{
for ( mycolor mycolor : mycolor.values() )//这里用的新的增强的循环方式
system.out.println( mycolor + " = " + mycolor.getnum());
mycolor scolor = mycolor.blue;
system.out.println(scolor);
if(scolor.getnum()==3)//这里就是序号比较
{
system.out.println("true");
}
}
public static void main(string args[])//测试我们的类
{
enumtest test = new enumtest();
test.showcolor();
}
}
在命令行下输入:
javac -source 1.5 enumtest.java
注:有些5.0编译器默认以1.4.2为默认编译属性,所以,新特性无法识别,因此,要在编译命令行中加入 –source 1.5指定使用新的特性。
编译文件,然后输入
java enumtest
运行结果为:
red = 1
yellow = 2
blue = 3
blue序号为:3
true
对于枚举类型的成员我们不仅可以指定序号,还可以指定其多个属性,还可以写很多方法在里面,因为java中的枚举就是面向对象的,是一个真正的类,就把java中的枚举当成一个类操作就行了。如sdk带的文档中的例子:
public enum planet {
mercury (3.303e+23, 2.4397e6),
venus (4.869e+24, 6.0518e6),
earth (5.976e+24, 6.37814e6),
mars (6.421e+23, 3.3972e6),
jupiter (1.9e+27, 7.1492e7),
saturn (5.688e+26, 6.0268e7),
uranus (8.686e+25, 2.5559e7),
neptune (1.024e+26, 2.4746e7),
pluto (1.27e+22, 1.137e6);
private final double mass; // in kilograms
private final double radius; // in meters
planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final double g = 6.67300e-11;
double surfacegravity() {
return g * mass / (radius * radius);
}
double surfaceweight(double othermass) {
return othermass * surfacegravity();
}
}
具体请参考sdk文档中的$jdk-1_5_0-doc$\docs\guide\language\enums.html。
