Одна проблема состоит в том, что есть две подписи valueOf
. Один занимает примитивную длину, другой - строку.
У Java нет возможности узнать, что вы имеете в виду.
Вы можете указать вручную, используя свидетель типа:
System.out.println(MyClass.<String, Long>myMethod(Long::valueOf));
или, если хотите, присвойте ссылку на метод переменной, чтобы из переменной можно было получить дополнительную информацию о типе.
Function<String, Long> func = FakeLong::valueOf;
System.out.println(MyClass.myMethod(func));
Другая проблема здесь:
return otherMethod(myParam);
Фактически, otherMethod
специально требует функции, которая принимает String и возвращает long, в то время как myParam
может быть любой функцией вообще. Здесь есть фундаментальная несовместимость. Ваш дизайн не так.