IT story

C #에 null 병합 연산자 (??)에 해당하는 Java가 있습니까?

hot-time 2020. 6. 7. 10:16
반응형

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 통합 연산자에 대한 간단한 구문이 없습니다. 확장 된 양식을 사용해야합니다.

참고 : https://stackoverflow.com/questions/5223044/is-there-a-java-equivalent-to-null-coalescing-operator-in-c

반응형