ho diversi "processori" statiche Predifined esecuzione lo stesso metodo, ad esempio:riferimento statica (con ::) per un metodo che restituisce un'interfaccia
default double process(double num){
Esempio:
public class Test {
public static void main(String[] args) {
test(Test::processor1, 1d);
test(Test::processor2, 1d);
}
static double processor1(double num){
return num * 10;
}
static double processor2(double num){
return num * 20;
}
//...
static void test(Function<Double, Double> f, double d){
// Do something util here
System.out.println(f.apply(d));
}
...
Ora immaginate che ho degli oggetti che possono fornire una lista di ulteriori "processori".
Sto tentando di utilizzare uno interface
per definire quei "processori" aggiuntivi.
static interface IProcessor{
double process(double num);
}
Realizzazione di un oggetto con l'aggiunta di "processori":
static class SomeObject{
// Just return one but should be a list...
static IProcessor getExtraProccessors(){
return new IProcessor(){
public double process(double num){
return num * 30;
}
};
}
}
Quassù tutto compila e funziona bene. Ma ora sono bloccato.
Utilizzo di SomeObject::getExtraProccessors
Ho un riferimento su un metodo statico che restituisce un'interfaccia, come posso richiamare il metodo dell'interfaccia?
Il mio primo tentativo è stato con
test(SomeObject::getExtraProccessors::process, 1d);
Ma questo non può essere compilato dando un The target type of this expression must be a functional interface
Quindi, per favore mi può dire se è possibile a questo e se sì come ? E se non è possibile, come dovrei farlo?
È possibile utilizzare 'DoubleUnaryOperator' anziché' Function 'e invece di' IProcessor'. –
Non è necessario creare un'istanza di classe interna anonima di 'IProcessor', invece restituire un lambda:' return n -> n * 30; '. E se hai bisogno di una lista: restituisci 'Arrays.asList (n -> n * 30, n -> n/2, ...)'. Inoltre, come ha detto @PaulBoddington, 'DoubleUnaryOperator' è l'interfaccia fornita da Java per operare su un unico operando' double'. –