有人可以帮我如何为以下功能接口编写lambda实现。
public interface InnerLambda {
public <R> R test(String str);
}
我的课很好
public class Example {
public static void main(String[] args) {
testInner(str->"");
}
public static void testInner(InnerLambda innerLambda){
}
}
答案 0 :(得分:0)
如果您有这样的界面,那就太好了
gltransformation
有很多方法可以做到这一点,如下所示:
E2
//您可以使用下面的行进行呼叫
int length = innerLamda.test(“ input”);
Lamda会根据您返回的值识别R的值 从你的拉姆达。
编辑:
如果要在方法级别使用泛型,则可以使用方法引用来实现,因为lamda不支持它,如以下文档所述:
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3
方法参考示例如下:
@FunctionalInterface // Ensure if your interface have only one bastract method.
public interface InnerLambda<R> {
public R test(String str);
}
注意:如果您将其称为功能接口,那么什么是 在接口级别定义泛型的问题。 只有一种抽象方法。
答案 1 :(得分:0)
您不能将lambda表达式用于具有通用方法作用域的功能接口。
通过泛型,您的接口功能将更有意义:
public interface InnerLambda<R> {
R test(String str);
}
这里有一些例子。
要将String参数连接到另一个String:
InnerLambda<String> l1 = s -> s + "other string";
根据String参数无效返回布尔值:
InnerLambda<Boolean> l2 = Objects::nonNull;