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
知乎討論泛型T泛型