Vinnaren i pepparkakshustävlingen!
2021-11-04, 23:44
  #1
Medlem
Om man har en metod som ska returnera ett vrde beroende p vilket if-villkor som uppfylls i metoden och inget villkor uppfylls, dvs inget returvrde kan skickas, hur br man sig t fr att f metoden att fungera? Den mste returnera ett vrde, finns det en enkel lsning.

Om x = 3 vill jag prompta ett felmeddelande:
Kod:
int x;

public Object testmetod (int x){

this.x = x;

if(x == 1){
return new Object
} else if(x == 2){
return new Object
}
}
Citera
2021-11-05, 00:04
  #2
Medlem
Mysquos avatar
Lite osker p vad du menar, men jag ser i alla fall tre alternativ:

1: anvnd exception
if (x==1 || x==2) return new Object();
throw new IllegalValueException("Ogilitigt vrde ("+x+")");

2: anvnd null
return x==1 || x==2 ? new Object() : null;

3: anvnd Optional
return x==1||x==2 ? return Optional.of(newObject()) : Optional.empty();
Citera
2021-11-05, 00:06
  #3
Medlem
JohannesSnajdares avatar
Det beror ju lite p, om det kan frvntas att x kan vara 3 lite d och d s kanske "return null" funkar?

Kod:
class A {

   public Object testmetod(int x) {

     if(x==1)
        return new Object();

     return null;
   }
}

Om dremot x aldrig frvntas kunna vara ngot annat n 1 och 2 utan det r en felsituation hade jag kastat en exception istllet

Kod:
class B {

   public Object testmetod(int x) {

     if(x==1)
        return new Object();

     throw new IllegalArgumentException("Bad x");
   }
}

Sen finns det en massa andra stt att lsa det, metoden kan t.ex. returnera ett objekt som innehller dels en "status" (bool) som talar om "det gick bra" och sen sjlva "datat" som returnerades.

Edit: tva p den.
Citera
2021-11-05, 00:39
  #4
Medlem
Value objects som freslogs ovan kan vara snyggt.

valObj.HasValue
valObj.Value

Null blir ofta ett problem. Anroparen vet inte om det som returneras kan vara null. Och nr du debuggar kod, och fr tillbaks null, d vet du inte vad som hnde inne i metoden. Det blir mycket enklare i lngden om det blir tydligt vilken vg som har krts.

T. ex om du skulle ha en bugg under If 1 som av misstag returnerar null, d har du ingen aning om det r rtt eller fel nr du ser att null returnerades, om du har fr vana att returnera null p andra stllen.

Ett annat alternativ r output parametrar:
http://www.javapractices.com/topic/TopicAction.do?Id=37

Jag fredrar att returnera value objects och undviker alltid null.
Citera
2021-11-05, 10:17
  #5
Medlem
Bonnatorps avatar
Vad r det fr fel p att anvnda ett helt vanligt else?
D uppfylls ju villkoret nr ingen av de specificerade villkoren uppfylls.
Citera
2023-09-10, 01:22
  #6
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Vad r det fr fel p att anvnda ett helt vanligt else?
D uppfylls ju villkoret nr ingen av de specificerade villkoren uppfylls.
Problemet r vl att det inte kommer kompilera utan returvrde (eller kastat exception). Eller om du undrar varfr ovan inte har else I sitt exempel s r det verfldigt om alla tidigare grenar returnerar.
Citera
2023-11-15, 07:16
  #7
Medlem
Du skulle ocks kunna ha returtyp boolean och returnera true eller false. Som i nedan kod.

Kod:
public boolean testmetod(int x) {
    this.x = x;
    
    switch(x) {
        case 1:
        case 2:
            return true;
        default:
            return false;
    }
}
Citera
2023-11-15, 20:54
  #8
Medlem
Det snyggaste (om inga krav frbjuder det) r att gra ett rekursivt anrop i defaulten. I det fallet tycker jag att det r OK att returnera null d man aldrig kommer att hamna dr utan enbart gr det fr att slcka varningar i Idn.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in