Chciałbym utworzyć klasę w języku Java 8, która jest w stanie rekurencyjnie utworzyć obiekt, który ma metodę, która pobiera parametr funkcji na podstawie parametrów dodanych przeze mnie.Zbierz argumenty do zastosowania do funkcji curry w Java/Scala
Na przykład chciałbym być w stanie to zrobić:
new X().param(23).param("some String").param(someObject)
.apply((Integer a) -> (String b) -> (Object c) -> f(a,b,c))
Sposób zastosowania byłoby następnie zastosować zebrane parametry danej funkcji.
Uważam, że powinno to być możliwe bez refleksji przy jednoczesnym zachowaniu bezpieczeństwa typu, ale nie jestem w stanie zrozumieć, w jaki sposób. Rozwiązanie w Scali jest również mile widziane, jeśli mogę przetłumaczyć je na język Java 8. Jeśli nie jest to możliwe, przyjmuję odpowiedź, która wyjaśnia, dlaczego.
Co mam tak daleko jest zasadniczo to:
class ParamCmd<A,X> {
final A param;
public ParamCmd(A param) {
this.param = param;
}
public<B> ParamCmd<B, Function<A,X>> param(B b) {
return new ParamCmd<>(b);
}
public void apply(Function<A,X> f) {
// this part is unclear to me
}
public static void main(String[] args) {
new ParamCmd<Integer,String>(0).param("oops").param(new Object())
// the constructed function parameters are reversed relative to declaration
.apply((Object c) -> (String b) -> (Integer a) ->
"args were " + a + " " + b + " " + c
);
}
}
Jak zauważył w komentarzach kodu, moje problemy są zachowując parametry funkcji w kolejności wywołań param() i faktycznie zastosowaniu parametrów .
Wygląda na to, że potrzebujesz Aplikacji. – pedrofurla