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中,这些被定义为多重表达式(它们取决于它们的使用环境 – 如泛型,方法引用,三元运算符) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |