Java中一個重要的類型:枚舉,它能夠用來表示一組取值範圍固定的變量,使用 enum 關鍵字定義枚舉類型,其中元素不能重複,一般大寫表示。利用Java的反射機制,能夠在運行時分析類,如查看枚舉類型的修飾符、父類和自定義方法等,下面簡單說下。java
(一)枚舉類型sql
定義一個簡單的枚舉類型,以下:編程
public enum Position{ EAST,SOUTH,WEST,NORTH }
利用Java反射機制分析類:數組
//獲取Class對象 Class<Position> eClass = Position.class; String modify = Modifier.toString(eClass.getModifiers()); System.out.println("修飾符:"+modify); System.out.println("父類:"+eClass.getSuperclass());
輸出爲:數據結構
修飾符:public static final 父類:class java.lang.Enum
Enum類是全部枚舉類型的父類,它是一個沒有抽象方法的抽象類。該類定義了枚舉類型的經常使用方法,如枚舉元素間的比較compareTo()和equals()方法、枚舉元素定義的名稱name()方法等,可使用「==」比較兩個枚舉元素。學習
枚舉類型不能繼承,能夠看作普通類,像定義方法,這裏就不作介紹了,基本不多用到。測試
(二)泛型code
泛型是Java中的重要特性,使用泛型編程可使代碼得到最大的重用。在使用泛型時要指明泛型的具體類型,避免類型轉換。對象
定義一個棧結構的泛型類:繼承
/* * 泛型:定義參數類型爲T的泛型類 */ public class Stack<T> { //使用T類型的鏈表保存入棧的元素(簡化開發) private LinkedList<T> conter = new LinkedList<T>(); //向棧中添加元素 public void push(T t){ conter.addFirst(t); } //從棧中刪除元素 public T pop(){ return conter.removeFirst(); } //判斷鏈表是否爲空 public boolean empty(){ return conter.isEmpty(); } }
測試類:
public static void main(String[] args) { //建立棧對象,並指定參數類型 Stack<String> stack = new Stack<String>(); //添加元素 stack.push("Java"); stack.push("Php"); stack.push("Python"); //遍歷棧 while(!stack.empty()){ System.out.println((String)stack.pop()); } }
泛型類就是含有一個或多個類型參數的類,泛型參數的命名通常使用單個的大寫字母,如上所示,且有必定的侷限性,像泛型類型的參數只能使用類類型,如String、Integer等,而不能使用基本數據類型,如int、float等,不能拋出或捕獲泛型類型的實例,不能直接使用泛型數組,不能實例化類型變量等。
Java中的泛型不支持實例化類型變量,如 「T[] arr = new T[10];」,屬於非法的語句。對於某些不足之處,可使用Java反射機制進行彌補,如泛型數組,這裏不作介紹了,你們感興趣的能夠自行百度查看。
在Java中,不只能夠聲明泛型類,還能夠在普通類中聲明泛型方法。聲明泛型方法須要注意:
簡單的聲明以下所示:
public static <T> List<T> query(String sql){}
利用泛型類型參數<T>能夠將類、方法或接口的類型限制爲T類型,但不夠靈活。Java中可使用通配符加強泛型,使用「?」做爲通配符,能夠利用extends關鍵字來設置取值的上限,如:「<? extends Number>」表示Byte、Double、Float、Integer等都適合這個類型參數。另外還能夠設置取值下限,這裏不作介紹了。
泛型在Java中的一個應用:查找。在數據結構中,查找有不少類型,如順序查找、折半查找、散列查找等,這裏有泛型化的折半查找法,你們感興趣的可自行學習。
好了,上面就是一些關於Java中枚舉類型和泛型的知識總結,但願你們喜歡。