它當handle.length()是大於10
不,它不需要返回值。它從不返回任何值,該方法的類型爲void
。如果名稱長度不少於10個字符(如果名稱長度小於10個字符,則不設置),它會執行設置handleName
實例字段。
,是不是應該在handle.length()小於10時返回值?
沒有,if
清楚地寫着「如果手柄的長度小於10,回報」,這就是它集handleName
之前。 return
立即離開該功能,繞過可能遵循的任何代碼。
爲什麼這個if語句恰恰相反?
if(false){ //do stuff; }
因爲在那種情況下,所述邏輯內的if
塊;在你的第一個例子中,之後的和if
阻止了return
s(繞過函數的其餘部分)。也就是說,你的第一個例子是:
if (!condition) {
return;
}
doSomething();
但你的第二個例子是
if (condition) {
doSomething();
}
這是你的第一個例子中的註釋版本:
public void setHandleName(String handle){ // Accept a `handle` string parameter
if(handle.length() < 10){ // If the length of `handle` is less
// than 10, enter the block
return; // Leave this method immediately, without
// doing anything else
} // This is the end of the conditional bit
handleName = handle; // Set `handleName` to `handle`
}
因此,如果我們進入if
塊,我們將返回,並且永遠不會到達handleName = handle;
一行,所以我們從未設置它。如果我們不要去塊if
塊,我們不提前回來,所以我們做設置它。
我們可以(並且可能應該)重寫setHandleName
使用從後面的例子結構:
public void setHandleName(String handle){ // Accept a `handle` string parameter
if(handle.length() >= 10){ // If `handle`'s length is 10 or higher
handleName = handle; // Set `handleName` to `handle`
} // This is the end of the conditional bit
}
你的方法有**無效**的返回類型,所以它不是在任何情況下返回任何東西。它有條件地更新'handleName'。 – azurefrog