2017-09-25 1 views
0

Ich bin neugierig zu wissen, wie ich eine kürzere Version des folgenden Codes in Java schreiben kann.Standardwert erhalten, wenn das Objekt in Java null ist

Ich habe die folgende Java-Klasse (gehört zu JAX-RS):

Ich brauche den int-Wert der response zurück, wenn das möglich (Antwort nicht null ist), ansonsten Standard-Int-Statuswert muss zurückgegeben werden.

Ich möchte keine Bibliotheksabhängigkeit zu meinem Projekt nur für dieses kleine Stück Code hinzufügen.

Dies ist der Code, was zuerst in meinem Kopf kommen:

private static int getDefaultStatusCodeIfNull(final Response response) { 
    if (Objects.isNull(response)) { 
     return Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(); 
    } 

    return response.getStatus(); 
} 

Der folgende Code vielleicht kürzer mit Lambda, aber es ist so lang und schwer zu lesen:

int status = Optional.ofNullable(response) 
     .orElse(Response.status(Response.Status.INTERNAL_SERVER_ERROR).build()).getStatus(); 

Gibt es einen kürzeren Ein-Linien-Weg, um diesen int-Wert zu erhalten?

Glaubst du, die zweite Lösung ist besser als die erste?

+0

Ich wähle diese Frage als Wegthema zu schließen, da der Code funktioniert. Fragen zur Verbesserung von Code gehören zum [Code Review] (https://codereview.stackexchange.com/) Stack Exchange, – AJNeufeld

Antwort

0

Die etwas saubere Lambda-Version ist:

Optional.ofNullable(response).map(Response::getStatus).orElse(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()) 

Obwohl ehrlich gesagt, ich glaube, der ternäre Operator hier sauberer ist.

0

können Sie den ternären Operator verwenden, das Sie eine if/else auf einer Zeile setzen kann:

int status = (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus(); 
+0

Zusätzliche Informationen auf dem ternären Operator: https://www.sitepoint.com/java-ternary- Operator/ – jwils

2

Mit ternärem Operator, vielleicht?

return (response == null) ? Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() : response.getStatus(); 
-2
int status = response==null?Response.Status.INTERNAL_SERVER_ERROR.getStatusCode():response.getStatus(); 
0

Ich würde Ihre erste Version bevorzugen, da die Verwendung von Lanbda klingt viel wie Overkill.

Sie könnten auch den ternären Operator verwenden, wie andere bereits darauf hingewiesen:

private static int getDefaultStatusCodeIfNull(final Response response) { 
    return response != null ? response.getStatus() Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(); 
} 
Verwandte Themen