为了账号安全,请及时绑定邮箱和手机立即绑定

方法重载不明确

方法重载不明确

摇曳的蔷薇 2021-10-20 15:28:19
我目前正在复习 OCA 考试,并认为 int/float 方法适用于第三次考试。在 Jeane Boyarsky 的 OCA Study Guide 中只说了 4 条顺序规则来选择正确的重载方法。按类型精确匹配较大的原始类型自动装箱类型可变参数有人可以解释为什么java说它不明确吗?public static void main(String... args){    OverLoadingMethod ov=new OverLoadingMethod();    ov.test(1F,2);    ov.test(1,2F);    ov.test(1,2);}public void test(float i,int j){    System.out.println("float/int");        }public void test(int i,float j){    System.out.println("int/float"); }public void test(float i,float j){    System.out.println("float/float");}产生这个错误OverLoadingMethod.java:12: error: reference to test is ambiguous        ov.test(1,2);          ^  both method test(float,int) in OverLoadingMethod and method test(int,float) in OverLoadingMethod match
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

没有一个重载需要两个整数。

因此,必须将其中一个整数扩展为浮点数。但哪一个?浮点数是第一个参数时存在重载,而浮点数是第二个参数时存在另一个重载。

应该选哪个?客观上哪个更好?根据语言规范的规则,两者都不是。因此暧昧。


查看完整回答
反对 回复 2021-10-20
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

对于ov.test(1,2)test(int i,float j)test(float i,int j)都是可访问和适用的。然后编译器需要选择最具体的一个,而其中任何一个都不够具体,因此会发生编译器错误。

查看完整回答
反对 回复 2021-10-20
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

由于没有精度损失,Java 会自动将 int 转换为 float。

因此,您test(1,2)可以解释为两个浮点参数,一个浮点数 - 一个整数,一个 int - 一个浮点数。因此对于编译器来说是不明确的。


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 185 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信