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

Java 如何模拟多参数副作用函数,java,guava,Java,Guava,我想模拟以下界面: interface MultiSideEffectFunction<T> { void action(T first, T second); } 接口MultiSideEffectFunction{ 无效动作(T第一,T第二); } (这将使我不必引入新的接口) 有没有一种更喜欢的番石榴方法 注:我考虑过用 Function<Pair<T>, Void> 函数 但有两个问题使得创建新接口更可取: 我们必须定义一个名为Pair

我想模拟以下界面:

interface MultiSideEffectFunction<T> {
    void action(T first, T second);
}
接口MultiSideEffectFunction{
无效动作(T第一,T第二);
}
(这将使我不必引入新的接口)

有没有一种更喜欢的番石榴方法

注:我考虑过用

Function<Pair<T>, Void>
函数
但有两个问题使得创建新接口更可取:

  • 我们必须定义一个名为
    Pair
    的类,它看起来很像一个
    Map.Entry
    ,具有更合适的getter名称(第二个问题:有这样的番石榴类型吗?)
  • Void
    返回类型总是一个难题-最好有一个真正的
    Void
    签名

  • 这里是番石榴

    首选的Guava方法是编写自己的接口

    特别是,不要使用
    功能
    <代码>功能仅在功能没有副作用时使用


    番石榴故意缺少一对
    类型;我们建议,无论何时需要一对,您都可以创建自己的类,将有用的名称附加到这两个值上,而不是完全没有信息的“first”和“second”。(典型的例子是GPS坐标;一个名为
    LatLong
    的类比一对
    Pair
    的类信息量要大得多)

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

    但无论如何,作为一个示例API,它提供的类正是您想要的。事实上,他们提供的课程,我认为是一样的

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


    刚刚编辑了因为有明显的打字错误)

    谢谢凯文-绝地武士对我来说是新闻。然而,我发现这是一种好奇心,而不是我可能会用到的东西。如果他们打算创建一个库来分离Java,其中包括在编译阶段生成代码的注释,那么我认为他们最好能花时间为模式(如getter/setter/listener,Java中样板文件的头号原因,IMHO)提出一个基于注释的解决方案。他们还故意夸大“传统Java”示例,拒绝使用advanced for loop——这只是糟糕的营销,不会愚弄任何人。天哪,我刚刚发现,我想看看我是否能让它在Netbeans/Maven之间工作。凯文,我比你想象的还要感谢你,因为你激发了我进行这项调查!绝地武士的例子很有道理。。。我没有注意到。我不喜欢编译时注释处理,这就是为什么我开发了一个库,在运行时将方法包装为类似函数的对象,在Guava、Functional Java和Jedi等库的基础上工作。