2017-09-25 3 views
0

Javaで次のコードの短いバージョンをどのように書くことができるかを知りたいと思っています。オブジェクトがJavaでnullの場合、デフォルト値を取得します

私は(JAX-RSに属している)次のJavaクラスを持っている:

その可能性(応答がnullでない)場合、私はresponseStatusのint型の値を返す必要がありますそうでない場合はデフォルトのintステータス値を返す必要があります。

この小さなコードのためだけに、私は自分のプロジェクトにライブラリ依存関係を追加したくありません。

これは最初に私の心の中に出てくるどのようなコードです:

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

    return response.getStatus(); 
} 

次のコードは、ラムダと多分短いですが、読んでいる限り、ハードです:

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

このint値を取得するための短い1行の方法はありますか?

第2のものが第1のより良い解決法だと思いますか?

+0

。コードを改善する方法に関する質問は、[コードレビュー](https://codereview.stackexchange.com/)スタック交換に属します – AJNeufeld

答えて

0

少しクリーナーラムダのバージョンは次のとおりです。

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

正直、私はここでの三項演算子はきれいだと思いますけれども。

0

あなたは1行に/他の場合は置くことができます三項演算子を使用することができます:多分、三項演算子を使って

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

三項演算子に関する追加情報:https://www.sitepoint.com/java-ternary-オペレーター/ – jwils

2

を?

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

あなたの最初のバージョンを好むでしょう。lanbdaを使用するのは、過剰殺人に似ています。他の人がすでに指摘したよう

また、三項演算子を使用することができます。私は、コードが動作しているので、オフトピックとして、この質問を閉じるために投票しています

private static int getDefaultStatusCodeIfNull(final Response response) { 
    return response != null ? response.getStatus() Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(); 
} 
関連する問題