Java中的泛型T

Java中的泛型T

1、問題:

public static <T> List<T> filter(List<T> list) {...}

這個方法簽名中有3個T,乍一看第二、3個T都能理解,就是第一個T是什麼意思呢?java

答案:

其實第二、3個T咱們的理解不許確。咱們先來看下面的這個方法簽名:code

public static List<T> filter(List<T> list) {...}

// 咱們本身寫了一個類T
public class T {
  ...
}

這時候你就恍然大悟了,原來這裏的T是咱們本身的類,而不是泛型啊!若是咱們沒有一個叫作T的類,那麼方法聲明就會報錯,找不到類T!對象

因此,咱們再回到問題,第一個T就是指明瞭泛型T,然後面2個T都是引用第一個T的類型來使用的!咱們再換種寫法:get

public static <M> List<M> filter(List<M> list) {...}

解讀:該方法對任意的類型M(即泛型):接收M類型的List對象,處理後返回一個M類型的List對象!io

進階一下:

public static <M, N> List<N> filter(List<M> list) {...}

這裏,用到2個泛型。聲明的時候就有2個啦!該方法接收M類型的List對象,處理後返回類型N的List對象。class

2、參考文章

知乎討論泛型T泛型

相關文章
相關標籤/搜索