Lambda返回类型为通用

时间:2018-08-13 12:41:44

标签: java-8

有人可以帮我如何为以下功能接口编写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){

    }
}

2 个答案:

答案 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;