我遇到一個Java項目下面的代碼,我不知道該用它來做什麼:功能接口的對象強制
public Function<CustomEnum,String> foo(SomeObject someObject) {
return ((Function<CustomEnum,String>) (someObject::toString)).andThen(r -> someObject::getSomethingWithEnumParameter);
}
我真的不明白,你怎麼能投的東西一個功能界面。那有什麼意思?
返回值的結果類型不是任何值someObject。
是不是Function<CustomEnum, String>
定義了一個匿名函數,採用類型CustomEnum
並返回String
?
我已經閱讀了關於Function<T,R>
的java文檔,說實話,這比我讀文檔之前沒什麼意義。
這是我相信正在發生的事情。
FOO返回了適用於一些
CustomEnum
一個匿名函數返回一個字符串FOO的內部匿名函數(這是某種投射到
someObject::toString
,我不明白)是應用於將從foo(someObject).apply(customEnum)
的初始呼叫傳遞的CustomEnum
。andThen
將從foo中的匿名函數(這是鑄造某種程度上,我仍然不明白)的結果字符串,然後返回值someObject::getSomethingWithEnumParameter
。爲什麼不是返回類型只是someObject::getSomethingWithEnumParameter
的類型,爲了討論的緣故,我們會說它是Map<R,T>
。
如果有人能幫助我理解這個流程,我將不勝感激。
該代碼很討厭,如果該開發者在我的團隊中,我會和他/她進行認真的談話。完成該操作的正確方法是創建一個單獨的方法,其主體是'return someObject.getSomethingWithEnumParam(someObject.toString());',因此可以將該方法的簡單引用用作函數。 – VGR