C#에 null margeing 연산자(--)와 동등한 Java가 있습니까?
자바에서 다음 코드와 유사한 작업을 할 수 있습니까?
int y = x ?? -1;
슬프게도-아니다.가능한 한 가까운 것은 다음과 같습니다.
int y = (x != null) ? x : -1;
물론 필요한 경우 라이브러리 메서드로 정리할 수 있지만(길이를 크게 줄일 수 있을 것 같지는 않습니다), 구문 수준에서는 이보다 더 간결하게 사용할 수 있는 것은 없습니다.
Guava는 MoreObjects라고 불리는 유사한 작업을 수행하는 메서드를 가지고 있습니다.첫 번째 Non Null(T,T)
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
이것은 당신이 다음과 같은 것을 가지고 있을 때 더 도움이 된다.
int y = firstNonNull(calculateNullableValue(), -1);
비용이 많이 드는 메서드를 두 번 호출하거나 코드 내의 로컬 변수를 두 번 참조할 필요가 없기 때문입니다.
간단한 답변: 아니오
스태틱 유틸리티 메서드를 작성하는 것이 최선입니다(이를 통해 Import할 수 있습니다).import static
구문)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
위의 내용은 Guava의 방법과 동일합니다.firstNonNull
@ColinD에 의해 처리되지만 일반적으로는 더 확장될 수 있습니다.
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
아니요. 회피책 함수는 & & 및 | do와 같은 진정한 늘 결합 연산자 단락이 아닙니다.즉, 첫 번째 식이 늘일 경우에만 두 번째 식을 평가하려고 합니다.
Apache Commons Lang 3의 다른 옵션입니다ObjectUtils.firstNonNull(T...)
.나는 Guava와 달리 이 방법을 선호합니다. 왜냐하면, 이 방법은 던지지 않습니다.Exception
그것은 단순히 돌아올 것이다.null
;
Java의 프리미티브는 null일 수 없으므로 이 문장은 개념적으로 의미가 없습니다.단, 래퍼 클래스(Integer, Character 등) 및 기타 인스턴스화 가능한 클래스는 null일 수 있습니다.
이 사실 외에 null 병합 연산자에 대한 짧은 구문은 없습니다.확장 양식을 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/5223044/is-there-a-java-equivalent-to-null-coalescing-operator-in-c
'itsource' 카테고리의 다른 글
SQL select return 값을 바꾸는 방법 (0) | 2022.09.12 |
---|---|
스캐너 클래스에서 next() 메서드와 nextLine() 메서드의 차이점은 무엇입니까? (0) | 2022.09.12 |
클릭으로 PHP 기능 실행 (0) | 2022.09.12 |
RxJs Subject 또는 Observable의 현재 값을 얻는 방법 (0) | 2022.09.12 |
MySQL/PHP를 사용하여 필드에 now()를 사용하여 현재 날짜/시간을 삽입합니다. (0) | 2022.09.12 |