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