Java编译器:具有相同名称和不同签名的两个方法如何与一个方法调用匹配?

Java编译器:具有相同名称和不同签名的两个方法如何与一个方法调用匹配?,第1张

Java编译器:具有相同名称和不同签名的两个方法如何与一个方法调用匹配?

根据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-不精确的方法参考-具有多个重载的参考。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存