不可能使用lambda直接创建多方法对象。
但是,您可以使用变通方法以非常简洁的方式解决问题:
使用一个util方法,该方法将多个单方法对象作为参数,并返回一个多方法对象,单方法对象已打包到该对象中。
示例:
interface MultiMethodInterface {
void method1();
String method2(String arg);
}
public static void example() {
// One lambda for each method, they are packed into a
// MultiMethodInterface object by the multiMethodInterface method
MultiMethodInterface i1 = createMultiMethodObject(
() -> System.out.println("method1"),
arg -> "method2: " + arg);
// Sometimes only one of the methods is used, a specialized wrapper
// can be used if that is common
MultiMethodInterface i2 =
createMethod1Wrapper(() -> System.out.println("method1"));
}
public static MultiMethodInterface createMultiMethodObject(
Runnable methodAction1,
Function<String, String> methodAction2)
{
return new MultiMethodInterface() {
@Override
public void method1() {
methodAction1.run();
}
@Override
public String method2(String arg) {
return methodAction2.apply(arg);
}
};
}
public static MultiMethodInterface createMethod1Wrapper(Runnable methodAction1) {
return createMultiMethodObject(methodAction1, arg -> "");
}
产生的代码至少比创建匿名类要短一些,也漂亮一些。至少如果方法实现很短,和/或只有一个方法需要被实现。
例如,在SWT工具包中使用这种技术来创建侦听器对象。
不,没有。如果我正确理解了您的问题,您可能希望使用lambdas来处理具有多个抽象方法的接口。在这种情况下,答案是否定的:
函数接口是只包含一个抽象方法的任何接口。(函数接口可能包含一个或多个默认方法或静态方法。)由于函数接口仅包含一个抽象方法,因此在实现时可以省略该方法的名称。为此,不使用匿名类表达式,而是使用lambda表达式[…]
请在上面阅读:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
问题内容: 我想验证以下行为的方法如下。 在我的@Test类中,我希望做这样的事情来验证是否使用“ exception.message”和再次使用“ exception.detail”进行了调用 但是Mockito抱怨如下 我如何告诉Mockito检查两个值? 问题答案: 进一步的阅读使我尝试使用ArgumentCaptors和以下作品,尽管比我想要的更为冗长。
我有一个程序,它有一个超级类,个人和子类,学生,并试图根据他们的生日和名字来比较他们什么时候是平等的。我做对了,但是在我试图解决的提示下,我得到了一个错误,自动评分器是:“测试学生和学生是一样的,即使成绩不同”,预期结果是真的,但我总是得到错误。这个程序在比较人和学生时起作用,在比较人和人时起作用,而不是学生和学生,我不知道为什么。 主要类别: 超类: 子类:
我在日蚀氧气里玩Lambda我有这样的代码 我无法提取Dummy::dothingsWithTwoArgs。Eclipse显示了一个编译错误语法错误,插入“AssignmentOperator Expression”以完成表达式,但提取在intellij中工作良好。在eclipse中有没有解决这个问题的方法?
问题内容: 我在接口上苦苦挣扎。考虑一下: 我希望函数返回a 或an ,具体取决于是否从或调用 当我尝试对此进行编译时,出现以下错误: 不能将s( StringGenerator类型)用作数组或切片文字中的Generator类型: StringGenerator不实现Generatorer(getValue方法的类型错误) 有getValue()字符串 要getValue() 我该如何实现? 问题
我想要的:我在下面试过了,但它不起作用。