栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我不能在Java中“静态导入”“等于”方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我不能在Java中“静态导入”“等于”方法?

JLS
15.12.1
。确定了两个原因,为什么一个方法可以“在范围内”:

  1. “ …有一个该方法是其成员的封闭类型声明”
  2. “ …由于一个或多个单一静态导入…”

现在有两个因素导致了令人惊讶的结果:

  1. 此时,仅考虑方法的名称,稍后再签名。
  2. 上面提到的两个替代方案都与“否则”联系在一起。在第一种情况下,我们最终查看了可见方法的封闭类。在第二种情况下,我们使用静态导入。

“否则”意味着搜索范围仅限于尝试两个分支中的任何一个。首先,我们必须决定是搜索封闭类型还是使用静态导入。封闭类型具有更高的优先级,我们找到名称正确的方法(Test.defaultIfNull()),搜索到此结束。稍后,当我们发现此方法不兼容时,就没有回去尝试静态导入了。

在JLS中这种情况并不少见,方法查找的其他问题也分阶段进行,其中一个阶段的部分匹配可能会阻止在后续阶段中找到更好的匹配。固定对数与可变对数匹配是此概念的另一个示例。在所有情况下,结果是编译器不会搜索整个可能的解决方案空间,但是在做出某些决定后,整个分支将被切断并且永远不会被访问。

可以从上面得出一个经验法则:重载只能在相同类型层次结构的方法之间进行选择,而不能在与继承无关的类型方法之间进行选择。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号