Javaの型推論

Java のにもちょっとした型推論があるんだけどいまいち。どこまでやってくれるんだ。言語仕様第3版読めばわかるのかな。
2回ハマった。

public class Foo
{
    public static void println(String str) {
        System.out.println(str);
    }
    
    public static void main(String[] args) {
        println(Functions.identityFunction().execute("foo")); // コンパイルエラーやがな。
    }
}

interface Function<S, T> {
    T execute(S s);
}

class Functions {
    // 恒等関数ほしいんです
    static <T> Function<T, T> identityFunction() {
        return new Function<T, T>() {
            public T execute(T t) {
                return t;
            }
        };
    }
}
public class Foo
{
    public static void println(String str) {
        System.out.println(str);
    }
    
    public static void main(String[] args) {
        println(Functions.<String>identityFunction().execute("foo")); // 教えてあげるとOKやん。
    }

}

...(略)...