天天看點

不想把狗放到雞窩裡?那就使用泛型

不想把狗放到雞窩裡?那就使用泛型

泛型在Java語言中也是一個重要的概念,利用泛型可以告訴編譯器我們需要什麼樣的類型。泛型經常作用于容器上,比如前面我們說到的List、Set和Map中。利用泛型可以讓我們的代碼更加的泛化。

泛型作用于類

泛型不僅可以作用于類上:

public class Xpp<T> {
  private T a;
  public Xpp(T a) { 
    this.a = a; 
  }
  public void set(T a) { 
    this.a = a; 
  }
  public T get() { 
    return a; 
  } 
}
           

需要使用什麼類型參數,就在類名後面添加尖括号,尖括号中是T,T是Type的意思,也就是Java類,表示的是類型參數,暫時不指定類型。

泛型也可以作用于匿名内部類。

泛型作用于方法

泛型還可以作用于方法上:

public class Xpp {
    public <T> void foo(T x) {
        System.out.println(x.getClass().getName());
    }
    public static <T> List<T> makeList(T... args) {
        List<T> result = new ArrayList<T>();
        for (T item : args)
            result.add(item);
        return result;
    }

    public static void main(String[] args) {
        Xpp xpp = new Xpp();
        xpp.foo("");
        xpp.foo(1);
        xpp.foo(1.0);
      	List<String> ls = makeList("A");
        System.out.println(ls);
        ls = makeList("A", "B", "C");
        System.out.println(ls);
    }
}
           

這裡定義了兩個泛型的方法,第一個方法可以傳入任何類型的參數,可以看出傳回的參數類型也是任何類型的參數。

這個代碼的輸出結果為參數類型,即

java.lang.String

java.lang.Integer

java.lang.Double

第二個方法表示可以傳入不定數目的任何類型的參數,使用

T... args

來表示。

泛型作用于接口

泛型還可以作用于接口上:

定義接口:

public interface Xpp<T> { 
	T next(); 
} 
           

這裡定義了一個泛型的接口,可以有如下的實作類:

public class Integer implements Generator<java.lang.Integer> {
  private int value = 0;
  public java.lang.Integer next() { 
  	return value++; 
  }
}
           

實作類中指明了具體的參數類型為Integer類型。

泛型标記符

總結

❤️ 感謝大家

  1. 歡迎關注我❤️,點贊👍🏻,評論🤤,轉發🙏
  2. 關注

    盼盼小課堂

    ,定期為你推送好文,還有群聊不定期抽獎活動,可以暢所欲言,與大神們一起交流,一起學習。
  3. 有不當之處歡迎批評指正。