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