returntypes
Hej! när man t.ex i denna metod vill att man ska retunera ett objekt:
/**
* Return the lot with the given number. Return null
* if a lot with this number does not exist.
* @param lotNumber The number of the lot to return.
*/
public Lot getLot(int lotNumber){
if((lotNumber >= 1) && (lotNumber < nextLotNumber)) {
// The number seems to be reasonable.
Lot selectedLot = lots.get(lotNumber - 1);
// Include a confidence check to be sure we have the
// right lot.
if(selectedLot.getNumber() != lotNumber) {
System.out.println("Internal error: Lot number " +
selectedLot.getNumber() +
" was returned instead of " +
lotNumber);
// Don't return an invalid lot.
selectedLot = null;
}
return selectedLot;
}
else {
System.out.println("Lot number: " + lotNumber +
" does not exist.");
return null;
}
}
//Så har man inte i slutet av metoden retunerat något... detta har förvirrat mig och jag undrar därför hur den metoden fungerar trotts att den inte i SLUTET av metoden retunerar ett objekt. All hjälp uppskattas !!
Alla möjliga utgångar returnerar något som är kompatibelt med funktionsdeklarationen (ett objekt eller null). Annars hade du fått kompileringsfel.
Det är just det jag undrar asså varför får jag ingen kompileringsfel i den metoden? behöver inte en metod med en icke void returntype i slutet av metoden retunera något ?
Hela metoden är en if...else.. Du kan inte lämna metoden "i slutet". Alla utgångar är hanterade.
Tack!!
Om du skriver en return på slutet så kommer kompilatorn antagligen att varna för att den aldrig kommer att köras.
Ojjj.. varför funkar inte det om man t.ex i slutet av metoden lägger till return null; dvs:
public Lot getLot(int lotNumber)
{
if((lotNumber >= 1) && (lotNumber < nextLotNumber)) {
// The number seems to be reasonable.
Lot selectedLot = lots.get(lotNumber - 1);
// Include a confidence check to be sure we have the
// right lot.
if(selectedLot.getNumber() != lotNumber) {
System.out.println("Internal error: Lot number " +
selectedLot.getNumber() +
" was returned instead of " +
lotNumber);
// Don't return an invalid lot.
selectedLot = null;
}
return selectedLot;
}
else {
System.out.println("Lot number: " + lotNumber +
" does not exist.");
return null;
}
return null;
}
@Laguna förklarade det: "Om du skriver en return på slutet så kommer kompilatorn antagligen att varna för att den aldrig kommer att köras".
Citat från Oracles dokumentation om Java:
A method returns to the code that invoked it when it
- completes all the statements in the method,
- reaches a return statement, or
- throws an exception (covered later),
whichever occurs first.