加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:57:43 所属栏目:Java 来源:网络整理
导读:为什么 java编译器抱怨第一个语句,这是因为表达式() – “”没有明确的类型,我的意思是它可能是供应商 String或自定义功能接口类型等…? Object emptyStringBuilder = () - ""; // causes compiler errorObject emptyStringBuilder = (SupplierString)() -
为什么 java编译器抱怨第一个语句,这是因为表达式() – > “”没有明确的类型,我的意思是它可能是供应商< String>或自定义功能接口类型等…?
Object emptyStringBuilder = () -> ""; // causes compiler error

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

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

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读