は、いくつかのJava 8メソッド関数を考える:2つのアクセサの構図がどのように見えるJavaメソッドリファレンスを簡潔に記述する方法は?
class Foo { Bar getBar() {} }
class Bar { Baz getBaz() {} }
:
Function<Foo, Bar> getBarFromFoo = Foo::getBar;
Function<Bar, Baz> getBazFromBar = Bar::getBaz;
Function<Foo, Baz> getBazFromFoo = getBarFromFoo.andThen(getBazFromBar);
より簡潔な方法はありますか?これはうまくいくようです
((Function<Foo, Bar>) Foo::getBar).andThen(Bar::getBaz)
しかし、それはかなり醜いです。外側の括弧は優先順位の理由のために理にかなっていますが、なぜキャストが必要ですか?
(Foo::getBar::getBaz
が...素敵な、悲しいかなだろう)
のコンパイルに失敗します - > foo.getBarを():: getBaz' ?あなたはそれを過度に複雑にしているようです。私は行方不明のものがありますか? –
@VinceEmigh、 'foo-> foo.getBar()。getBaz()'を意味しましたか?それ以外の場合は、意味がありません。 – Andrew
@VinceEmigh、あなたが提案した方法は十分に柔軟ではありません。可能なすべてのケースを構築するのではなく、実行時に 'Function'の' compose'、 'andThen'のような簡単な操作でそれらを構成する単純なマッパー(' a-> b'、 'b-> c')コンパイル時に。 – Andrew