C #에 null 병합 연산자 (??)에 해당하는 Java가 있습니까? [복제]
이 질문에는 이미 답변이 있습니다.
Java에서 다음 코드와 유사한 것을 수행 할 수 있습니까?
int y = x ?? -1;
슬프게도-아니요. 당신이 할 수있는 가장 가까운 것은 :
int y = (x != null) ? x : -1;
물론 필요하다고 생각되면 (길이를 줄일 가능성은 거의 없음) 라이브러리 방법으로이를 마무리 할 수는 있지만 구문 수준에서 더 간결한 것은 없습니다.
구아바 에는 MoreObjects.firstNonNull (T, T) 라는 비슷한 방법이 있습니다.
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
이것은 당신이 같은 것을 가질 때 더 유용합니다
int y = firstNonNull(calculateNullableValue(), -1);
잠재적으로 비싼 메소드를 두 번 호출하거나 코드에서 로컬 변수를 두 번 참조하도록 선언하지 않아도됩니다.
짧은 답변 : 아니오
정적 유틸리티 메소드를 작성하여 import static
구문을 사용하여 가져올 수 있도록하는 것이 가장 좋습니다.
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
위의 내용은 firstNonNull
@ColinD 의 Guava 방법과 동일 하지만 더 일반적으로 확장 할 수 있습니다
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
아니요, 해결 방법 함수는 정확히 동일하지 않으며 && 및 ||와 같은 실제 null 병합 연산자 단락입니다. 즉, 첫 번째 표현식이 널인 경우 두 번째 표현식 만 평가하려고 시도합니다.
ObjectUtils.firstNonNull(T...)
Apache Commons Lang 3의 또 다른 옵션입니다. Guava와 달리이 becuase를 선호합니다 Exception
. 이 방법은 . 단순히 반환됩니다 null
;
Java의 기본 요소는 널 (null) 일 수 없으므로 해당 명령문이 개념적으로 의미가 없습니다. 그러나 래퍼 클래스 (정수, 문자 등) 및 기타 인스턴스화 가능한 클래스는 null 일 수 있습니다.
그 외에도 null 통합 연산자에 대한 간단한 구문이 없습니다. 확장 된 양식을 사용해야합니다.
'IT story' 카테고리의 다른 글
py 스크립트에서 sys.setdefaultencoding (“utf-8”)을 사용해서는 안되는 이유는 무엇입니까? (0) | 2020.06.07 |
---|---|
Chrome에서 페이지가 다른 언어로되어 있고 번역 제안을 잘못 판단하는 이유는 무엇입니까? (0) | 2020.06.07 |
PostgreSQL로 데이터베이스 테이블 다이어그램을 생성하는 도구는 무엇입니까? (0) | 2020.06.07 |
하나의 폴더를 하나의 Subversion 저장소에서 다른 저장소로 어떻게 이동합니까? (0) | 2020.06.07 |
결합 후 : 호버 (0) | 2020.06.07 |