Ho un'interfaccia funzionale che estende la funzione standard jdk semplicemente ai tipi generici. Ora voglio combinare due funzioni che utilizzano andthen che sta gettando errore del compilatoreJava 8 estendere l'interfaccia di funzione e combinarli
Error:(25, 25) java: method andThen in interface
java.util.function.Function<T,R>
cannot be applied to given types;
required:java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
found:ui.instrumentation.api.transformation.Transformer<T,R>
reason: cannot infer type-variable(s) V (argument mismatch;ui.instrumentation.api.transformation.Transformer<T,R>
cannot be converted tojava.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
)
Ecco il codice di esempio:
public interface Transformer<T,R> extends Function<Message<T>, Message<R>> {
static <T, R> Transformer<T, R> combine2(Transformer<T, R> first, Transformer<T, R> second) {
return first.andThen(second));
}
}
C'è un modo per combinare le funzioni che si estende interfaccia funzione standard o c'è meglio modo di fare questo?
Perché proprio avete bisogno la funzione di 'combine2', quando' andThen' fa letteralmente la stessa cosa, per il tipo di argomento più generale 'Function'? – Mshnik
Quindi vuoi una funzione che richiede un 'Messaggio', passa a 'prima', ottiene un' Messaggio ' indietro, quindi in qualche modo passa 'Messaggio ' a' second' anche se 'second' ha bisogno di un' Messaggio 'non un' messaggio '. –
immibis
La mia raccomandazione: non utilizzare tali interfacce estensioni. Si risparmiano alcune lettere da digitare a scapito di non consentire l'uso delle implementazioni esistenti dell'interfaccia di base (qui 'Funzione'). Quindi, è necessario ri-implementare tutto, non solo "e poi", anche le funzioni banali come 'Function.identity()' non possono essere usate come 'Transformer'. Impara la lezione dagli errori dell'altro; pur avendo la stessa firma funzionale, non puoi usare un 'Transformer', dove è richiesto 'UnaryOperator >' (un altro esempio di non consentire il tipo di base 'Function') ... –
Holger