如圖所示,filter函數中的Predicate函數式接口的泛型形參設置成了? super T,這是爲了擴大Predicate的接受範圍,Predicate<? super T>能夠接收以T及T的父類做爲實際參數類型的匿名接口類對象或者說是lambda表達式對象。
而Predicate<T>則不能接收父類做爲實際參數的lambda表達式對象(後面記爲父類表達式對象),但實際上父類表達式對象所實現的函數對於子類T固然是適用的。因此,應當擴展接受。
一樣的,Function<? super T,? extends R>能夠接收T及其父類做爲實參之一且R及其子類做爲另外一實參的lambda表達式對象,由於Function的自己功能就是由T獲得R的一個函數,那麼若是T父類實參類型表達式對象的函數,必定對於T是適用的,由T父類實參類型獲得的R子類的函數,對於R也是適用的(返回R子類對象實際上就是返回了R類型的對象)。函數