7 svar
102 visningar
sampledragon5 är nöjd med hjälpen
sampledragon5 495
Postad: 1 nov 2021 08:56

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 !!

CurtJ 1143
Postad: 1 nov 2021 09:02

Alla möjliga utgångar returnerar något som är kompatibelt med funktionsdeklarationen (ett objekt eller null). Annars hade du fått kompileringsfel.

sampledragon5 495
Postad: 1 nov 2021 09:05

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 ?

CurtJ 1143
Postad: 1 nov 2021 09:25

Hela metoden är en if...else.. Du kan inte lämna metoden "i slutet". Alla utgångar är hanterade.

sampledragon5 495
Postad: 1 nov 2021 09:27

Tack!!

Laguna Online 28467
Postad: 1 nov 2021 09:32

Om du skriver en return på slutet så kommer kompilatorn antagligen att varna för att den aldrig kommer att köras.

sampledragon5 495
Postad: 1 nov 2021 09:48

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;
}

Lindehaven 820 – Lärare
Postad: 1 nov 2021 10:12

@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.

Svara Avbryt
Close