相同元數對於方法:調用兩種方法與空值
public void doSomething(mObject1 ob){
//Code A
}
public void doSomething(mObject2 ob){
//Code B
}
請告訴我執行的代碼調用,爲什麼當?
doSomething(null);
相同元數對於方法:調用兩種方法與空值
public void doSomething(mObject1 ob){
//Code A
}
public void doSomething(mObject2 ob){
//Code B
}
請告訴我執行的代碼調用,爲什麼當?
doSomething(null);
你不能調用DoSomething的帶有null參數。 編譯器會投訴。在所有其他情況下,該方法的簽名是匹配的。但是,這將起作用:
doSomething((mObject1)null);
它會成爲ambigious調用編譯時錯誤
對於重載的方法,用最具體的參數類型的一個被調用。否則,如果沒有方法獲勝,則認爲它是不明確的,並且是編譯器錯誤。
如果您想通過null
,您可以通過投射null
表達式或將其分配給變量來選擇所需的方法。
doSomething((MObject1)null);
doSomething((MObject2)null);
MObject1 m1 = null;
doSomething(m1);
MObject1 m2 = null;
doSomething(m2);
在你的榜樣,如果MObject1
是MObject2
反之亦然亞型,那麼它應該編譯。
(我是正確的正確大寫類型的名稱,因爲這是做正確的事。)
所以非常*正確! –
這取決於。如果mObject1
和mObject2
之一是另一個的子類型,則根據Java Language Specification 15.12.2.5選擇最具體的方法。
如果它們通過繼承不相關,則該方法調用被認爲是不明確的,並且會導致編譯器錯誤。
這是編譯器錯誤。 但是,如果一個方法參數是類而另一個是原始數據類型,那麼結果將會改變。
〜Dheeraj
這甚至不會編譯 –
@Adrmedi:編譯看看。 –
它可能編譯... –