Java基礎之 列舉

2021-08-13 00:48:57 字數 1932 閱讀 7054

乙個示例的列舉的定義:

public enum producttype 

public static producttype getportraitbyid(string name)

}throw new illegalargumentexception("illegal argument");

}public string getname()

public void setname(string name)

public string getno()

public void setno(string no)

}

這裡定義的是乙個列舉型別的定義。從上面可以看出,列舉和普通的類差不多,都包含乙個構造方法,而且可以加入需要的字段和方法。如果說在定義的時候有什麼不同呢,大概就在於必須在類的最頂部的位置定義幾個列舉型別,如果乙個列舉型別都沒有,也應該加上乙個;號。此外,就沒有什麼區別了。

如果我們需要將列舉定義成內部的字段不可變的,那麼我們就需要將字段定義成final型別的,並在構造方法中對字段進行初始化。

我們在列舉型別的內部定義列舉型別的時候,也是要使用列舉的構造方法的,並且構造方法也可以過載的。

注意,使用者所建立的列舉型別都會繼承enum類,上面我們用到了values方法,它返回當前列舉的所有列舉型別。values是乙個靜態方法,它不存在予enum類中,而是由編譯器插入到enum定義中的方法。

因為所有的列舉型別都預設繼承了enum類,所以自定義列舉型別就不能再繼承其他類了。

列舉有乙個ordinal欄位,它表示的是指定的列舉值在所有列舉值中的位置(從0開始)。不過,我們通常傾向於自己實現自己的id來給列舉值標序,因為這樣更有利於維護。

雖然,列舉沒有辦法繼承新的類,但是卻可以實現介面。這裡我們在介面內部定義一組列舉,用來表示同乙個大類中的一些分組,然後每個列舉內部再定義一些具體的列舉值:

public inte***ce city 

enum americancity implements city

enum englishcity implements city

}

這裡我們定義的是乙個城市的介面,藉口內部定義了三個列舉,分別列舉了中國、美國和英國的城市。可以看出在這裡我們使用介面定義了「城市」的抽象概念,然後在介面的內部定義了三個列舉,來對應三個不同的國家。這樣就相當於在city到具體的列舉之間又增加了乙個新的層次。定義完畢之後,我們可以這麼使用:

public static void main(string ...args)
如下面的**所示,我們定義了乙個介面型別operation來表示一些操作,其內部定義了乙個執行的方法(需要注意的是,我們在使用enum定義列舉的時候,實現介面的方法的操作是在各個列舉值上面實現的)。我們可以先定義一些基本的列舉型別,如果我們要在原來的基礎之上進行拓展的話,那麼我們只需要實現operation並新增新的列舉即可:

public inte***ce operation 

public enum basicoperation implements operation

},minus()

},times()

},divide()

};}public enum extendedoperation implements operation

};}

對以上定義的方法的乙個呼叫:

operation operation = basicoperation.add;
使用上面的兩行**,我們可以輕易地得出結果為15.這是沒有問題的,而且我們可以看出這裡借助於列舉實現了策略模式——我們只需要指定列舉的型別然後具體的執行過程不用更改,它就可以正確地為我們得出結果!

這是兩個適用於列舉型別的容器型別……

java基礎之列舉

讓某個型別的變數的值只能取若干個值中的乙個,否則,編譯器報錯。將原先執行時才能發現的問題提前到編譯時揭露。也是jdk1.5新特性 實現原理 1 將建構函式私有化,使其他人無法建立物件 2 定義預定數量的物件,並用public 和final static修飾,供使用者呼叫 3 可以有若干具體或抽象方法...

Java基礎之列舉

列舉 列舉enum 列舉就是要讓某個型別的變數的取值,只能為若干個固定值中的乙個,否則,編譯器報錯 列舉可以讓編譯器在編譯時就可以控制源程式中填寫的非法值,普通變數的方式在開發階段無法實現這一目標。列舉是一種特殊的類,列舉中的每乙個元素都是乙個例項物件 用普通類如何實現列舉功能,定義乙個weekda...

Java之列舉型別

用乙個例子來說明 在程式中規定交通燈的取值只能是 red,green,yellow 取其他值就會報錯,並且還能根據當前顏色知道下個顏色.怎麼實現?一 用普通類來實現 public abstract class trafficlamp 取得下個燈 public abstract trafficlamp...