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

在Java中,哪些重载将被选择为NULL?

在Java中,哪些重载将被选择为NULL?

慕盖茨4494581 2019-07-04 17:42:04
在Java中,哪些重载将被选择为NULL?如果我用Java编写这一行:JOptionPane.showInputDialog(null, "Write something");哪种方法会被调用?showInputDialog(Component parent, Object message)showInputDialog(Object message, Object initialSelectionValue)我可以测试一下。但在其他类似的情况下,我想知道会发生什么。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这个最具体方法将被调用-在本例中

showInputDialog(Component parent, Object message)

这通常属于“确定方法签名”规范中过载解决的步骤(15.12.2),特别是“选择最具体的方法”.

在不深入细节的情况下(您可以在规范中读到这些细节,也可以在这里阅读),介绍给出了一个很好的总结:

如果多个成员方法既可访问又适用于方法调用,则有必要选择一个成员方法为运行时方法分派提供描述符。Java编程语言使用的规则是最具体方法被选择。

非正式的直觉是,一个方法比另一个方法更具体,如果第一个方法处理的任何调用都可以传递给另一个方法,而不会出现编译时类型错误。


查看完整回答
反对 回复 2019-07-04
?
慕神8447489

TA贡献1780条经验 获得超1个赞

在特定情况下,将调用更具体的方法。但是,在一般情况下,方法签名可能是模棱两可的。考虑以下几点:

public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        m.testNullArgument(null);
    }

    private void testNullArgument( Object o )
    {
        System.out.println("An Object was passed...");
    }

    private void testNullArgument( Integer i )
    {
        System.out.println("An Integer was passed...");
    }

    private void testNullArgument( String s )
    {
        System.out.println("A String was passed...");
    }}

在这种情况下,编译器无法决定接受Integer的方法和接受字符串的方法。当我试图编译它时,我得到

reference to testNullArgument is ambiguous, both method testNullArgument(java.lang.Integer) in testnullargument.Main and method 
testNullArgument(java.lang.String) in testnullargument.Main match


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 409 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号