Java >> Java tutorial >  >> Tag >> throw

Skal jeg smide undtagelser i en if-else-blok?

Det giver ingen mening at smide en undtagelse i en prøveblok og straks fange den, medmindre catch-blokken kaster en anden undtagelse.

Din kode ville give mere mening på denne måde:

public Response getABC(Request request) {
    Response res = new Response();
    if (request.someProperty == 1) {
        // business logic
    } else {
        res.setMessage("xxxx");
    }
    return res;
}

Du har kun brug for try-catch-blokken, hvis din forretningslogik (udføres, når betingelsen er true ) kan give undtagelser.

Hvis du ikke fanger undtagelsen (hvilket betyder, at den, der ringer, skal håndtere den), kan du undvære else klausul:

public Response getABC(Request request) throws Exception {
    if (request.someProperty != 1) {
        throw new Exception("xxxx");
    }

    Response res = new Response();
    // business logic
    return res;
}

hvis du smider undtagelsen fra metoden, hvorfor så gider fange den? Det er enten du returnerer et svar med "xxxx" besked eller sender en undtagelse for den, der ringer til denne metode, til at håndtere det.

public Response getABC(Request requst) {
    Response res = new Response();
        if(request.someProperty == 1){
            //business logic
        else{
           res.setMessage("xxxx");
        }
    }
    return res;
}

ELLER

public Response getABC(Request requst) throw Excetpions {
    Response res = new Response();
        if(request.someProperty == 1){
            //business logic
        else{
           throw new Exception("xxxx");
        }
    return res;
}


public void someMethod(Request request) {
    try {
        Response r = getABC(request);
    } catch (Exception e) {
        //LOG exception or return response with error message
        Response response = new Response();
        response.setMessage("xxxx");
        retunr response;
    }

}

det virker ikke rigtigt, når man bevidst smider undtagelse og derefter direkte fanger den, den kan redesignes sådan her,
kan ændre throw new Exception("xxxx"); med res.setMessage("xxxx"); ,
og derefter kan beholde fangstundtagelsesdelen for at fange undtagelser, der kan ske inde i forretningslogikken.

public Response getABC(Request requst) {
  Response res = new Response();
  try{
      if(request.someProperty == 1){
          //business logic
      else{
         res.setMessage("xxxx");
      }
  }catch(Exception e){
      res.setMessage(e.getMessage);
  }
  return res;
}

Java tag