java8增强了泛型方法的类型推断能力:允许通过调用方法的上下文推断类型参数的目标类型,允许在方法调用链中将推断到的泛型参数传递至最后一个方法。

class MyUtil<E>{
    public static <Z> MyUtil<Z> nil(){
        return null;
    }
    public static <Z> MyUtil<Z> cons(Z head,MyUtil<Z> tail){
        return null;
    }
    E head(){
        return null;
    }
} 
public class InferenceTest {
    public static void main(String[] args) {
        //通过方法赋值的目标参数来推断类型参数为String
        MyUtil<String> ls=MyUtil.nil();
        //通过cons()方法所以需要的参数类型来推断类型参数的类型为Integer
        MyUtil.cons(42, MyUtil.nil());
    }
}