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

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

如果我用Java编写这一行:

JOptionPane.showInputDialog(null, "Write something");

哪种方法会被调用?

  • showInputDialog(Component parent, Object message)

  • showInputDialog(Object message, Object initialSelectionValue)

我可以测试一下。但在其他类似的情况下,我想知道会发生什么。


慕盖茨4494581
浏览 410回答 3
3回答

米琪卡哇伊

这个最具体方法将被调用-在本例中showInputDialog(Component parent, Object message)这通常属于“确定方法签名”规范中过载解决的步骤(15.12.2),特别是“选择最具体的方法”.在不深入细节的情况下(您可以在规范中读到这些细节,也可以在这里阅读),介绍给出了一个很好的总结:如果多个成员方法既可访问又适用于方法调用,则有必要选择一个成员方法为运行时方法分派提供描述符。Java编程语言使用的规则是最具体方法被选择。非正式的直觉是,一个方法比另一个方法更具体,如果第一个方法处理的任何调用都可以传递给另一个方法,而不会出现编译时类型错误。

慕神8447489

在特定情况下,将调用更具体的方法。但是,在一般情况下,方法签名可能是模棱两可的。考虑以下几点: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java