根据JLS§15.12.2.2:
除非参数表达式具有以下形式之一,否则认为它 与 可能适用的方法的 适用性有关
m:
- 隐式类型的lambda表达式1。
- 不精确的方法参考表达式2。
- […]
因此:
verify("bar", tokens.get("foo", e -> String.valueOf(e)));
e -> String.valueOf(e)在重载解析期间,将从适用性检查中跳过隐式类型的lambda表达式-两种
verify(...)方法均适用-
因此存在歧义。
相比之下,这是一些有效的示例,因为类型是明确指定的:
verify("bar", tokens.get("foo", (Function<Object, String>) e -> String.valueOf(e)));verify("bar", tokens.get("foo", (Function<Object, String>) String::valueOf));
1-隐式类型的lambda表达式是lambda表达式,其中推断了其所有形式参数的类型。
2-不精确的方法参考-具有多个重载的参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)