Vorrei creare una classe in Java 8 che sia in grado di creare ricorsivamente un oggetto che abbia un metodo che utilizza un parametro di funzione in base ai parametri che ho aggiunto.Raccogli gli argomenti da applicare alle funzioni curry in Java/Scala
Ad esempio, vorrei essere in grado di fare questo:
new X().param(23).param("some String").param(someObject)
.apply((Integer a) -> (String b) -> (Object c) -> f(a,b,c))
Procedimento applica allora applicare i parametri raccolti per la funzione data.
Ritengo che ciò dovrebbe essere possibile senza riflessioni mentre si mantiene la sicurezza del tipo, ma non riesco a capire come. Una soluzione in Scala è anche benvenuta, se posso tradurla in Java 8. Se non è possibile, accetterò anche una risposta che spiega perché.
Quello che ho finora è essenzialmente questo:
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
);
}
}
Come notato nei commenti di codice, i miei problemi stanno mantenendo i parametri della funzione nell'ordine delle chiamate di param(), e in realtà applicando i parametri .
Sembra che tu abbia bisogno di Applicativo. – pedrofurla