3
コンティニュアはコンポジットオブジェクトです。構造は次のとおりです。Javaマルチマップのオプションの使用
この表記ではそうContinent
--Country
----State
------Town
:
town= Optional.of(continent)
.map(Continent::getCountry)
.map(Country::getState)
.map(State::getTown)
.orElse(null);
これは正常に動作しますが、私は一般的なマッパーを書くしようとすると、
public static <T, R> T getFromMapping(R source,
T defaultValue,
Function<?,?>... functions) {
Optional sourceWrapper = Optional.ofNullable(source);
for (Function function : functions) {
sourceWrapper.map(function);
}
return (T) sourceWrapper.orElse(defaultValue);
}
と
ことによってそれを呼び出しますportfolio = getFromMapping(continent, null,
((Function<Continent, Country>) Continent::getCountry)
((Function<Country, State>) Country::getState),
((Function<State, Town>) State::getTown));
しかし動作しません。マッパは2番目のステップにジャンプし、大陸は国にキャストできないと言った理由は何ですか?マッピングを行っている間にキャストがなくなり、それを修正する方法がありますか?
混乱を避けるために、 'T'と' R'を入れ替えたいかもしれません。 'java.util.function'は' T'と 'U'が入力で' R'が戻り値であるという緩やかな命名規則を持っています。あなたは本質的に 'Function' –
を構築しています。提案:固定数の関数で 'getFromMapping'のバリアントを作成すると、型保証されたソリューションが得られ、引数をもうキャストする必要はありません。 – stholzm
@ HankDありがとうハンク、私はインターフェイスを修正しました〜 –