Непонятно, что такое s1
в s1::substring
. Если s1
является экземпляром String
и вы пытались создать ссылку на метод для определенного экземпляра String
, эта ссылка на метод не соответствует функциональному интерфейсу BiFunction
, поскольку для вызова biFunc1.apply()
требуется предоставить String
и Integer
, но вы уже указали конкретный экземпляр String
в ссылке на метод s1::substring
.
С другой стороны, s1::substring
соответствует функциональному интерфейсу Function<Integer,String>
.
Чтобы создать BiFunction
требуемого типа, используйте ссылку на метод не определенного экземпляра:
BiFunction<String, Integer, String> biFunc1 = String::substring;
Примеры:
String s1 = "abcde";
Function<Integer,String> func1 = s1::substring;
String sub1 = func1.apply(3); // always applied on the same String
BiFunction<String, Integer, String> biFunc1 = String::substring;
String sub2 = biFunc1.apply(s1,3); // applied on whichever String you supply