import java.util.function.BiFunction;
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Example example = new Example();
        assert example.methodThatDoesNotCompile("should getpostfix").equals("should getpostfix postfix");
    }

    private static class Example {

        private <S> String methodThatDoesNotCompile(S exampleArgument) {
            return exampleMethodThatAcceptsReference(this::<S>exampleMethodUsedAsReference).apply(exampleArgument);
        }

        private <T> Function<T, String> exampleMethodThatAcceptsReference(BiFunction<T, String, String> referenceAsArgument) {
            return i -> referenceAsArgument.apply(i, " postfix");
        }

        private <U> String exampleMethodUsedAsReference(U first, String second) {
            return first.toString() + second;
        }

    }
} 