为每个消费者简化

问题描述 投票:0回答:1

我有两个接口 。

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...

有什么方法可以简化它?有什么办法可以简化成这样?

java lambda simplify functional-interface
1个回答
0
投票

不如这样吧。

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));
© www.soinside.com 2019 - 2024. All rights reserved.