Ich habe mehrere predifined statische "Prozessoren" das gleiche Verfahren implementiert, zum Beispiel:Static Referenz (mit ::) auf ein Verfahren zurückkehr eine Schnittstelle
default double process(double num){
Probe:
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));
}
...
Jetzt vorstellen dass ich einige Objekte habe, die eine Liste von zusätzlichen "Prozessoren" bereitstellen können.
Ich versuche eine interface
zu verwenden, um diese zusätzlichen "Prozessoren" zu definieren.
static interface IProcessor{
double process(double num);
}
Implementierung eines Objekts mit zusätzlichen "Prozessoren":
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;
}
};
}
}
Bis hier alles kompiliert und funktioniert einwandfrei. Aber jetzt stecke ich fest.
Mit SomeObject::getExtraProccessors
Ich habe einen Verweis auf eine statische Methode, die eine Schnittstelle zurückgibt, wie kann ich die Methode der Schnittstelle aufrufen?
Mein erster Versuch war mit
test(SomeObject::getExtraProccessors::process, 1d);
Aber das kompiliert keinen So The target type of this expression must be a functional interface
geben Sie bitte könnten Sie mir sagen, ob es möglich, diese und wenn ja, wie ? Und wenn es nicht möglich ist, wie soll ich es tun?
Sie könnten 'DoubleUnaryOperator' anstelle von' Funktion 'und anstelle von' verwenden IP-Prozessor ". –
Sie müssen keine anonyme innere Klasseninstanz von 'IPprocessor 'erstellen, sondern geben ein Lambda zurück:' return n -> n * 30; '. Und wenn Sie eine Liste benötigen: return 'Arrays.asList (n -> n * 30, n -> n/2, ...)'. Wie auch @PaulBoddington sagte, ist 'DoubleUnaryOperator' die Schnittstelle, die von Java zur Verfügung gestellt wird, um an einem einzelnen' doppelten' Operanden zu arbeiten. –