【问题标题】:Feed object to consumer and return object向消费者提供对象并返回对象
【发布时间】:2019-09-20 23:53:29
【问题描述】:

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

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

很简单,但我不想为每个班级都重写它,而且我还希望它适用于不属于我的班级。我不能将此方法添加到 Object,并且我宁愿不创建返回参数的 Consumer 的子类。有没有更好的方法来做到这一点?

【问题讨论】:

  • 创建一个静态方法 perform 接受你的对象和副作用?
  • 我可以做到,但它与周围代码的“功能性” foo().bar().baz() 风格不太相符。
  • 如果您的所有类都可以扩展一个公共基类,这可能会有所帮助:stackoverflow.com/questions/17164375/…

标签: java generics lambda java-8


【解决方案1】:

您可以编写一个接受Consumer&lt;? super T&gt;T 类型参数的通用实用程序方法并完成这件事。请注意,您必须在此处使用方法级别的泛型。这是它的外观。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多