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等库的基础上工作。