我正在尝试学习Java8并试过以下示例。
我收到此代码的编译错误。你能帮我解决这个问题。
public class Lambdas {
public static void main(String[] args) {
System.out.println("Result Of Comparision" + () -> Integer.compare("First".length(), "Second".length()));
}
}
答案 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值添加到函数中,这是无意义的。函数没有值,函数是...函数,只有函数调用才能产生值。