Я столкнулся со следующим кодом в проекте Java, и я не уверен, что с ним делать:
public Function<CustomEnum,String> foo(SomeObject someObject) {
return ((Function<CustomEnum,String>) (someObject::toString)).andThen(r -> someObject::getSomethingWithEnumParameter);
}
Я действительно не понимаю, как вы можете передать что-то функциональному интерфейсу. Что это хотя бы значит?
Разве результирующий тип возвращаемого значения не будет любым значением someObject.
Разве Function<CustomEnum, String>
не определяет анонимную функцию, которая принимает тип CustomEnum
и возвращает String
?
Я прочитал документацию по Java для Function<T,R>
, и, честно говоря, это не имеет большего смысла, чем до того, как я прочитал документ.
Это то, что я считаю, происходит.
foo возвращает анонимную функцию, которая применяется к некоторому
CustomEnum
для возврата строкианонимная функция внутри foo (которая каким-то образом приводится к
someObject::toString
, чего я не понимаю) применяется кCustomEnum
, которая будет передана из начального вызоваfoo(someObject).apply(customEnum)
.andThen
возьмет результирующую строку из анонимной функции внутри foo (которая была приведена каким-то образом, я до сих пор не понимаю), а затем вернет значениеsomeObject::getSomethingWithEnumParameter
. Почему возвращаемый тип не является просто типомsomeObject::getSomethingWithEnumParameter
, который мы будем называтьMap<R,T>
, ради обсуждения.
Если бы кто-нибудь мог помочь мне понять этот поток, я был бы очень признателен.
return someObject.getSomethingWithEnumParam(someObject.toString());
, чтобы простая ссылка на этот метод могла использоваться как функция. - person VGR   schedule 10.01.2017