作者:Junsan Jin
日期:2005-03-25
郵箱:[email protected] ; [email protected]
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。