Каков наилучший способ проектирования / обработки в Java 8 упорядоченных вызовов различных методов - PullRequest
0 голосов
/ 05 ноября 2018

Мой вопрос касается дизайна

Я пытаюсь разработать порядок / последовательные вызовы на основе различных методов.

Предположим, мой класс:

public class Foo {

    public Object method1(String a){
        // impl1..
    }


    public Object method2(List<Object> list){
        // impl2..
    }

    public Object method3(Map<String,String> map, Object otherStuff){
        // impl3..
    }

    // other different methods ....
}

Я хочу следовать этой концепции http://qrman.github.io/posts/2017/02/09/pipeline-pattern-plumber-quest

Но моя разница в том, что я использую только один класс с несколькими методами, если бы у меня были разные сервисы, я бы создал новый класс для каждого сервиса с реализацией интерфейса, как в ссылке, но моя цель - создать список методов порядка внутри 1 класс, который будет выполнять их итерацию ...

Я думал о некоторой ссылке на метод, основанной на Java 8

как описано здесь: https://www.codementor.io/eh3rrera/using-java-8-method-reference-du10866vx

basic idea ?

List<> list = new ArrayList<>();
list.add(Foo::method1)
list.add(Foo::method2)
list.add(Foo::method3) ...

forEach ..list -> execute

Большое спасибо

1 Ответ

0 голосов
/ 05 ноября 2018

Поскольку формальные и фактические аргументы варьируются от одного метода к другому, вы не можете использовать ссылку на метод. Лямбдас должен выполнить работу:

    List<Consumer<Foo>> list = new ArrayList<>();
    list.add((foo) -> foo.method1("a"));
    list.add((foo) -> foo.method2(new ArrayList<>()));
    list.add((foo) -> foo.method3(new HashMap<>(), "Other stuff"));

    Foo foo = new Foo();
    list.forEach(fooConsumer -> fooConsumer.accept(foo));
...