【发布时间】:2015-11-19 11:44:35
【问题描述】:
我正在寻找一种调用多个参数方法但使用lambda 构造的方法。在文档中说,lambda 只有在可以映射到功能接口时才可用。
我想做这样的事情:
test((arg0, arg1) -> me.call(arg0, arg1));
test((arg0, arg1, arg2) -> me.call(arg0, arg1, arg2));
...
有没有什么方法可以优雅地做到这一点,而无需定义 10 个接口,每个参数计数一个?
更新
我使用从非方法接口扩展而来的多个接口,并且重载了该方法。
两个参数的示例:
interface Invoker {}
interface Invoker2 extends Invoker { void invoke(Object arg0, Object arg1);}
void test(Invoker2 invoker, Object ... arguments) {
test((Invoker)invoker, Object ... arguments);
}
void test(Invoker invoker, Object ... arguments) {
//Use Reflection or whatever to access the provided invoker
}
我希望有可能用一个解决方案替换 10 个调用程序接口和 10 个重载方法。
我有一个合理的用例,请不要问诸如“你为什么要做这样的事情?”之类的问题。和“你要解决的问题是什么?”或类似的东西。只要知道我已经考虑过了,这是我正在尝试解决的合理问题。
很抱歉添加混淆调用它,但它实际上是在我当前的用例(测试构造函数合同)中调用的。
基本上,如上所述,请考虑一种方法,该方法适用于lambda 中不同数量的属性。
【问题讨论】:
-
简短回答:不。长答案:nooooooooo。 (但是,无论如何,你会怎么处理这样的事情呢?)
-
你所有的论点都是同一类型吗?如果是这样,您是否考虑过使用可变参数?有什么具体的例子可以说明你正在尝试做什么?
-
Louis 对不起,我为你更新了(update2)。
-
您使用可变数量的参数但不能使用可变参数是否有任何特殊原因?
-
公平地说,yak shaving 是一回事,我想问“你真正想做什么?”总是一个公平的问题......