Compte tenu des fonctions de méthode Java 8:Façon concise de composer des références de méthode Java?
class Foo { Bar getBar() {} }
class Bar { Baz getBaz() {} }
Composition des deux accesseurs ressemble:
Function<Foo, Bar> getBarFromFoo = Foo::getBar;
Function<Bar, Baz> getBazFromBar = Bar::getBaz;
Function<Foo, Baz> getBazFromFoo = getBarFromFoo.andThen(getBazFromBar);
Y at-il une façon plus concise? Cela semble fonctionner
((Function<Foo, Bar>) Foo::getBar).andThen(Bar::getBaz)
Mais c'est plutôt moche. Les parens externes ont un sens pour des raisons de préséance, mais pourquoi la distribution est-elle nécessaire?
(Foo::getBar::getBaz
serait bien, mais hélas ...)
Pourquoi ne pas faire 'foo -> foo.getBar() :: getBaz' ? On dirait que vous êtes trop compliqué. Y a-t-il quelque chose qui me manque? –
@VinceEmigh, voulez-vous dire 'foo -> foo.getBar(). GetBaz()'? Sinon, cela n'a aucun sens – Andrew
@VinceEmigh, la façon dont vous avez suggéré n'est pas assez flexible. Il est préférable de préparer des mappeurs simples ('a-> b',' b-> c') en les composant avec des opérations simples comme 'compose',' andThen' au moment de l'exécution plutôt que de construire tous les cas possibles au moment de la compilation. – Andrew