17.列舉型別與泛型
我這些學習筆記,記錄的都是我自己認為的知識點,可能以後再看的時候還要翻書,但是可以用來定位到準確的書中示例的位置,減少翻書重找的時間,利於自身知識體系的搭建。 self-transcendence
第17章 列舉型別與泛型
17.1 列舉型別
使用列舉型別可以取代以往定義常量的方式,並且還有程式在編譯時進行檢查的功能。
17.1.1 使用列舉型別設定常量
以往設定常量,通常將常量放置在介面中,這樣在程式中就可以直接使用,並且該常量不能被修改,因為在介面中定義常量時,該常量的修飾符為final與static。
使用列舉型別定義常量的語法如下:
Public enum Constants{
Constants_A,
Constants_B,
Constants_C
}
enum是定義列舉類的關鍵字。程式中使用常量,用Constants.Constants_A來引用。
17.1.2 深入瞭解列舉型別
每一個列舉類都可以看做是一個類,當定義一個列舉型別時,每一個成員都可以看做一個列舉例項,這些成員都預設被final public static修飾,所以直接使用列舉型別名稱嗲用列舉型別成員就行。
方法名稱 | 具體含義 | 使用方法 |
values() | 該方法可以將列舉型別成員以陣列的形式返回 | 列舉名.values |
valueOf() | 該方法可以實現將普通字串轉換為列舉例項 | 列舉名.valueOf(“abc”) |
compareTo() | 該方法用於比較兩個列舉物件在定義時的順序 | 列舉名.compareTo |
ordinal() | 該方法用於得到列舉成員的位置索引 | 列舉名.ordinal |
呼叫compareTo方法返回的結果,正值代表方法中引數在呼叫該方法的列舉物件位置之前;0代表兩個互相比較的列舉成員的位置相同;負值代表方法中引數在呼叫該方法的列舉物件位置之後。
-------------------------------------------------------------------
17.2 泛型
泛型實質上就是使程式設計師定義安全的型別。在沒有出現泛型之前,java也提供了對Object的引用“任意化”操作,這種“任意化”操作就是對
Object類為最上層的父類,很多程式設計師為了使程式更為通用,設計程式時通常使傳入的值與返回的值都以Object型別為主。當需要使用這些例項時,必須正確地將該例項轉換為原來的型別,否則就會發生異常。語法是 類名<T>
在定義泛型時,還可以宣告多個型別:
MutiOverClass<T1,T2>
MutiOverClass:泛型類名稱
這樣例項化指定型別的物件時就可以指定多個型別:
MutiOverClass<Boolean,Float> aaa=new MutiOverClass<Boolean,Float>();
定義泛型類時也可以宣告陣列型別:
Public T[] getT(){};
Javaq中已經被泛型化的集合框架:
ArrayList<E> HashMap<K,V> HashSet<E> Vector<E>
泛型的高階用法包括限制泛型可用型別和使用型別萬用字元等。
預設可以使用任何型別來例項化一個泛型類物件,但java中也對泛型類例項的型別做了限制,語法是:class 類名稱<T extends anyClass> ,anyClass指某個介面或類。
使用泛型限制後,泛型類的型別必須實現或繼承了anyClass這個介面或類。無論anyClass是介面還是類,在進行泛型限制時,都必須使用extends關鍵字。
型別萬用字元,主要作用是建立一個泛型物件時,限制這個泛型類的型別實現,或者繼承某個介面或類的子類。要宣告這樣一個物件可以使用“?”萬用字元來表示,同時使用extends關鍵字來對泛型加以限制。語法是:泛型類名稱<? extends List> a=null;
其中,<? exteand List>表示型別未知,當需要使用該泛型物件時,可以單獨例項化。
泛型類和泛型介面可以被繼承和實現。