Java 8类型推断错误,将lambda表达式赋给Object类型的变量

前端之家收集整理的这篇文章主要介绍了Java 8类型推断错误,将lambda表达式赋给Object类型的变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么 java编译器抱怨第一个语句,这是因为表达式() – > “”没有明确的类型,我的意思是它可能是供应商< String>或自定义功能接口类型等…?
Object emptyStringBuilder = () -> ""; // causes compiler error

Object emptyStringBuilder = (Supplier<String>)() -> "";

你能详细说明确切的原因吗​​?

解决方法

lambda表达式的类型推断来自目标类型,这意味着当您编写类似这样的内容时:
() -> "";

这确实是一个供应商(对你而不是编译器),但如果我有一个类型声明如下:

static interface Producer<T> {
    T produce();
}

这意味着您的lambda可以是制作人或供应商.因此,分配必须是@FunctionalInterface(或强制转换),以便可以进行类型推断.

在JLS中,这些被定义为多重表达式(它们取决于它们的使用环境 – 如泛型,方法引用,三元运算符)

猜你在找的Java相关文章