在这种情况下,jvm如何解决对重载方法的调用?

Paresh Radadiya

以下代码已成功编译

class Overloading{

    public static void aMethod (double val1, long val2) {
        System.out.println ("double, long");
    }

    public static void aMethod (int val1, long val2) {
        System.out.println ("int, long");
    }

    public static void main(String[] args) {
        aMethod(9, 10);
    }
}

但是当方法签名改变时

由此

aMethod (double val1, long val2) 

对此

aMethod (double val1, int val2) 

发生编译时间错误

Overloading.java:12: error: reference to aMethod is ambiguous, both method aMeth
od(double,int) in Overloading and method aMethod(int,long) in Overloading match
                aMethod(9, 10);
                ^
乔恩·斯基特

首先,JVM不能解决重载-编译器可以解决。(例如,JVM决定执行哪个重写方法。)

至于为什么在方法调用变得模糊-编译器正在寻找一个单一的方法,其中从该方法每次转换参数类型(int对于两个参数)的方法参数类型(intlongdouble)至少与特定如在其它相应的转换候选方法。

intint的转换比从int的转换更具体double,因此在两种情况下,您的第二个重载都会“获胜”。

对于第二个参数,在您的原始代码中,这是两个重载int的转换long,因此这意味着第二个重载总体上“获胜”。

在修改后的代码中,从intint的转换比从int的转换更具体long,因此该参数第一个重载“获胜”。因此,对于一个参数,每个重载都比另一个重载好,并且调用是模棱两可的。

有关所有详细信息请参见JLS第15.12.2节(及其引用和包含的部分,尤其是15.12.2.5)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在这种情况下如何解决NoMethodError?

来自分类Dev

在这种情况下如何解决网格布局问题?

来自分类Dev

在这种情况下如何调用ICommand.CanExecute?

来自分类Dev

Bash-在这种情况下如何调用函数

来自分类Dev

在这种情况下(熊猫),如何解决KeyError(f“ [{{key}]都不在[{axis_name}]”“)?

来自分类Dev

为什么在这种情况下C#无法解决正确的重载?

来自分类Dev

如何在这种情况下编写equals()方法?

来自分类Dev

在这种情况下,Ruby的map方法如何工作?

来自分类Dev

如何解决“ fpclassify”:对重载函数的歧义调用

来自分类Dev

Java:在这种情况下如何解析字符串?

来自分类Dev

在这种情况下,如何最好地解决函数比较TypeError?

来自分类Dev

在这种情况下,为什么要调用父类方法而不是子类?

来自分类Dev

AngularJS在这种情况下,有什么短方法可以调用父级作用域?

来自分类Dev

在这种情况下,如何在循环中多次调用Meteor.call?

来自分类Dev

在这种情况下,如何在循环中多次调用Meteor.call?

来自分类Dev

在这种情况下,您如何从减速器/动作正确调用函数?

来自分类Dev

在这种情况下可以重写ToString()方法吗

来自分类Dev

在这种情况下“添加”数组的最佳方法

来自分类Dev

在这种情况下可以实现hashCode()方法吗?

来自分类Dev

在这种情况下可以重写ToString()方法吗

来自分类Dev

在这种情况下获取地址价值的方法?

来自分类Dev

在这种情况下如何定义适用性?

来自分类常见问题

在这种情况下,如何防止ArrayIndexOutOfBoundsException?

来自分类Dev

在这种情况下如何动态形成插入查询

来自分类Dev

在这种情况下如何更新多个列

来自分类Dev

在这种MongoDB连接情况下,如何注入bean?

来自分类Dev

在这种情况下,如何设置我的Class参数?

来自分类Dev

在这种情况下,jquery .after应该如何工作?

来自分类Dev

在这种情况下如何使用unique_ptr?

Related 相关文章

  1. 1

    在这种情况下如何解决NoMethodError?

  2. 2

    在这种情况下如何解决网格布局问题?

  3. 3

    在这种情况下如何调用ICommand.CanExecute?

  4. 4

    Bash-在这种情况下如何调用函数

  5. 5

    在这种情况下(熊猫),如何解决KeyError(f“ [{{key}]都不在[{axis_name}]”“)?

  6. 6

    为什么在这种情况下C#无法解决正确的重载?

  7. 7

    如何在这种情况下编写equals()方法?

  8. 8

    在这种情况下,Ruby的map方法如何工作?

  9. 9

    如何解决“ fpclassify”:对重载函数的歧义调用

  10. 10

    Java:在这种情况下如何解析字符串?

  11. 11

    在这种情况下,如何最好地解决函数比较TypeError?

  12. 12

    在这种情况下,为什么要调用父类方法而不是子类?

  13. 13

    AngularJS在这种情况下,有什么短方法可以调用父级作用域?

  14. 14

    在这种情况下,如何在循环中多次调用Meteor.call?

  15. 15

    在这种情况下,如何在循环中多次调用Meteor.call?

  16. 16

    在这种情况下,您如何从减速器/动作正确调用函数?

  17. 17

    在这种情况下可以重写ToString()方法吗

  18. 18

    在这种情况下“添加”数组的最佳方法

  19. 19

    在这种情况下可以实现hashCode()方法吗?

  20. 20

    在这种情况下可以重写ToString()方法吗

  21. 21

    在这种情况下获取地址价值的方法?

  22. 22

    在这种情况下如何定义适用性?

  23. 23

    在这种情况下,如何防止ArrayIndexOutOfBoundsException?

  24. 24

    在这种情况下如何动态形成插入查询

  25. 25

    在这种情况下如何更新多个列

  26. 26

    在这种MongoDB连接情况下,如何注入bean?

  27. 27

    在这种情况下,如何设置我的Class参数?

  28. 28

    在这种情况下,jquery .after应该如何工作?

  29. 29

    在这种情况下如何使用unique_ptr?

热门标签

归档