Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用空值调用具有相同arity的两个方法_Java - Fatal编程技术网

Java 使用空值调用具有相同arity的两个方法

Java 使用空值调用具有相同arity的两个方法,java,Java,关于方法: public void doSomething(mObject1 ob){ //Code A } public void doSomething(mObject2 ob){ //Code B } 调用时执行的代码是什么?为什么 doSomething(null); 它将变成模糊的调用编译时错误对于重载方法,将变成模糊的调用编译时错误,调用具有最特定参数类型的方法。否则,如果没有方法获胜,则认为它是不明确的,并且是编译器错误 如果要传递null,可以通过强制转换nul

关于方法:

 public void doSomething(mObject1 ob){
 //Code A
 }

 public void doSomething(mObject2 ob){
 //Code B
 }
调用时执行的代码是什么?为什么

doSomething(null);

它将变成模糊的调用编译时错误

对于重载方法,将变成模糊的调用编译时错误

,调用具有最特定参数类型的方法。否则,如果没有方法获胜,则认为它是不明确的,并且是编译器错误

如果要传递
null
,可以通过强制转换
null
表达式或将其分配给变量来选择所需的方法

doSomething((MObject1)null);
doSomething((MObject2)null);

MObject1 m1 = null;
doSomething(m1);
MObject1 m2 = null;
doSomething(m2);
在您的示例中,如果
MObject1
MObject2
的子类型,或者反之亦然,那么它应该编译


(我正确地将类型名称大写,因为这是正确的做法。)

对于重载方法,将调用具有最特定参数类型的方法。否则,如果没有方法获胜,则认为它是不明确的,并且是编译器错误

如果要传递
null
,可以通过强制转换
null
表达式或将其分配给变量来选择所需的方法

doSomething((MObject1)null);
doSomething((MObject2)null);

MObject1 m1 = null;
doSomething(m1);
MObject1 m2 = null;
doSomething(m2);
在您的示例中,如果
MObject1
MObject2
的子类型,或者反之亦然,那么它应该编译


(我正确地将类型名称大写,因为这是正确的做法。)

不能使用null参数调用doSomething。编译器会抱怨的。在所有其他情况下,方法的签名都是匹配的。但是,这将起作用:

doSomething((mObject1 )null);

不能使用null参数调用doSomething。编译器会抱怨的。在所有其他情况下,方法的签名都是匹配的。但是,这将起作用:

doSomething((mObject1 )null);

这要看情况。如果
mObject1
mObject2
中的一个是另一个的子类型,则根据选择最具体的方法


如果它们不是通过继承关联的,则方法调用被认为是不明确的,并将导致编译器错误。

这取决于。如果
mObject1
mObject2
中的一个是另一个的子类型,则根据选择最具体的方法

如果它们不是通过继承关联的,则方法调用被认为是不明确的,并将导致编译器错误。

这是编译器错误。 然而,若一个方法参数是class,另一个是primitive datatype,那个么结果就会改变

~Dheeraj

这是编译器错误。 然而,若一个方法参数是class,另一个是primitive datatype,那个么结果就会改变

~Dheeraj