2017-09-25 14 views
0

Java에서 다음 코드의 짧은 버전을 작성하는 방법을 알고 싶습니다.객체가 Java에서 null 인 경우 기본값을 가져옵니다.

나는 다음과 같은 자바 클래스 (JAX-RS에 속함)이 : 그 수 (응답이 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 값을 얻는 데 더 짧은 한 줄 방법이 있습니까?

제 2의 것이 더 좋은 해결책이라고 생각하십니까? 어쩌면,

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

. 코드 개선 방법에 대한 질문은 [코드 검토] (https://codereview.stackexchange.com/) 스택 교환 – AJNeufeld

답변

0

경미 청소기 람다 버전은 다음과 같습니다

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

정직하지만, 여기 삼항 연산자는 청소기라고 생각합니다.

0

당신은 당신이/다른 한 줄에가있는 경우를 넣을 수 있습니다 삼항 연산자를 사용할 수 있습니까?

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

에 속해 있습니다. 삼항 연산자에 대한 추가 정보 : https://www.sitepoint.com/java-ternary- 운영자/ – jwils

2

사용 삼항 연산자 :

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