将对象喂给使用者并返回对象

时间:2019-09-20 23:53:29

标签: java generics lambda java-8

我有很多地方需要获取对象,根据该对象的状态执行一些副作用,然后最终返回该对象。对于特定的Foo类,我可以编写一个方法

public Foo perform(Consumer<Foo> sideEffect) {
    sideEffect.accept(this);
    return this;
}

足够简单,但我不想不必为每个类都重写它,并且我也希望它适用于非我的类。我无法将此方法添加到Object中,而我不希望成为返回参数的Consumer的子类。有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以编写一个通用实用程序方法,该方法接受Consumer<? super T>T类型的参数并将其完成。注意,您必须在此处使用方法级别的泛型。看起来就是这样。

public static <T> T perform(Consumer<? super T> sideEffect, T obj) {
    sideEffect.accept(obj);
    return obj;
}