Java語言學習(十一):枚舉類型和泛型

    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中,不只能夠聲明泛型類,還能夠在普通類中聲明泛型方法。聲明泛型方法須要注意:

  • 使用<T>格式來表示泛型類型參數,參數的個數能夠多個;
  • 類型參數列表要放在訪問權限修飾符、static和final以後;
  • 類型參數列表要放在返回值類型、方法名稱、方法參數以前;

    簡單的聲明以下所示:

public static <T> List<T> query(String sql){}

     利用泛型類型參數<T>能夠將類、方法或接口的類型限制爲T類型,但不夠靈活。Java中可使用通配符加強泛型,使用「?」做爲通配符,能夠利用extends關鍵字來設置取值的上限,如:「<? extends Number>」表示Byte、Double、Float、Integer等都適合這個類型參數。另外還能夠設置取值下限,這裏不作介紹了。

    泛型在Java中的一個應用:查找。在數據結構中,查找有不少類型,如順序查找、折半查找、散列查找等,這裏有泛型化的折半查找法,你們感興趣的可自行學習。

    好了,上面就是一些關於Java中枚舉類型和泛型的知識總結,但願你們喜歡。

相關文章
相關標籤/搜索