如何模拟多参数副作用函数



我想模拟以下接口:

interface MultiSideEffectFunction<T> {
    void action(T first, T second);
}

(这将使我不必引入新界面)

有没有首选的番石榴方法来做到这一点?

注意:我想过用

Function<Pair<T>, Void>

但是有两个问题使得创建新接口更可取:

  1. 必须定义一个名为 Pair<T> 的类,它看起来很像具有更合适的 getter 名称的Map.Entry<T, T>(作为第二个问题:有这样的番石榴类型吗?
  2. Void返回类型总是很痛苦 - 最好有一个真正的void签名。

番石榴贡献者在这里。

首选的 Guava 方法是编写自己的界面。

特别是,不要使用Function ; Function 只应在函数没有副作用时使用。

番石榴故意缺少Pair类型;我们建议,任何时候你需要一对,你创建自己的类,将有用的名称附加到两个值,而不是完全没有信息的"第一"和"第二"。 (典型的示例是 GPS 坐标;标题为 LatLong 的类比Pair<Double, Double>提供的信息量大得多。

Guava团队毫不掩饰他们只提供基本的函数式习语,并且他们对重新创建完整的函数式编程API不感兴趣。 除此之外,您可以查看其他几个 API。 其中一些 API 支持副作用诱导的"函数式"对象,即使副作用与纯函数式编程模型相反(我说这很好,因为 Java 永远不会成为真正的函数式语言,即使在 lambda 之后)。

但无论如何,作为示例 API,Jedi 提供了您正在寻找的 Command 类。 在函数式Java中,它们提供了Effect类,我认为这是一回事。

顺便说一句,在您的示例中,您可能希望提供多个 Type Var 而不仅仅是 <T> ,以便您的每个输入类型可以彼此不同。

刚刚编辑了明显的错别字)

最新更新