Упростить для каждого потребителя - PullRequest
1 голос
/ 02 мая 2020

У меня есть два интерфейса:

public interface Observer<T extends Observer<T>> {
    List<T> getObserverChildren();

    default void forEachObserver(Consumer<T> consumer) {
        this.getObserverChildren().forEach(consumer);
    }
}

и

public interface ChronoObserver extends Observer<ChronoObserver> {
    default void updateTime(int seconds, int minutes) {
        this.forEachObserver(observerChild -> observerChild.updateTime(seconds, minutes));
    }
}

Я хотел бы упростить вызов метода "forEachObserver", добавив что-то более подобное:

default void forEachObserver(TheType myMethod) { // myMethod may be any method like updateTime(...), updateDay(...), etc...
        this.getObserverChildren().forEach(observerChild -> observerChild.myMethod);
}

чтобы я мог назвать это примерно так:

this.forEachObserver(myMethod); // myMethod could be updateTime(seconds, minutes), updateDay(day), etc...

Можно ли как-нибудь упростить это? Спасибо

1 Ответ

0 голосов
/ 02 мая 2020

Как насчет этого?

void forEachObserver(Consumer<Observer> cons) { // myMethod may be any method like
                                        // updateTime(...), updateDay(...),etc...
        getObserverChildren().forEach((child)->cons.accept(child));
    }
}


forEachObserver((t)->t.myMethod());

Например,

forEachObserver((t)->t.updateTime(10,20));
...