Java8:这里不期望Lambda表达式

时间:2017-05-20 05:53:31

标签: lambda java-8

我正在尝试学习Java8并试过以下示例。

我收到此代码的编译错误。你能帮我解决这个问题。

public class Lambdas {

    public static void main(String[] args) {
        System.out.println("Result Of Comparision" + () -> Integer.compare("First".length(), "Second".length()));
    }
}

2 个答案:

答案 0 :(得分:1)

lambda expression必须具有目标类型,这是一个功能界面。

  

如果T是函数接口类型(第9.8节)并且表达式与派生的地面目标类型的函数类型一致,则lambda表达式在赋值上下文,调用上下文或具有目标类型T的强制转换上下文中是兼容的来自T。

您可以通过将lambda表达式转换为特殊的功能接口来编译代码。例如:malloc

malloc

但是然后IntSupplier lambda本身不是您期望的结果。所以你需要调用功能接口方法来获得结果。

class Lambdas {

    public static void main(String[] args) {
        System.out.println("Result Of Comparision" 
        + (IntSupplier)() -> Integer.compare("First".length(), "Second".length()));
    }
}

答案 1 :(得分:0)

println需要打印一个值。您试图将String值添加到函数中,这是无意义的。函数没有值,函数是...函数,只有函数调用才能产生值。