У меня есть несколько предустановленных статических "процессоров" , реализующих один и тот же метод, например:
default double process(double num){
Пример:
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));
}
...
Теперь представьте, что у меня есть некоторые объекты, которые могут предоставить список дополнительных "процессоров" .
Я пытаюсь использовать interface
для определения этих дополнительных "процессоров" .
static interface IProcessor{
double process(double num);
}
Реализация объекта с дополнительными "процессорами":
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;
}
};
}
}
Здесь все компилируется и отлично работает. Но теперь я застрял.
Использование SomeObject::getExtraProccessors
У меня есть ссылка на статический метод, возвращающий интерфейс, как я могу вызвать метод интерфейса?
Моя первая попытка была с
test(SomeObject::getExtraProccessors::process, 1d);
Но это не компилируется, давая The target type of this expression must be a functional interface
Итак, пожалуйста, не могли бы вы сказать мне, возможно ли это, и если да, то как? И если это невозможно, как мне это сделать?