programing

Guava를 사용하여 가능한 null 값을 기본값으로 변환하는 방법은 무엇입니까?

procenter 2021. 1. 16. 10:43
반응형

Guava를 사용하여 가능한 null 값을 기본값으로 변환하는 방법은 무엇입니까?


Guava는 전달 된 객체 참조가 다음과 같은 경우 기본값을 가져 오는 방법을 제공합니까 null? 같은 뭔가를 찾고 I'am은 <T> T nullToDefault(T obj, T default)의했다 기본이 경우 반환 obj가 있다 null.

여기 stackoverflow에서 나는 그것에 대해 아무것도 발견하지 못했습니다. 나는 순수한 구아바 솔루션을 찾고 있습니다 (있을 경우)!

Gauva 10 API에서 아무것도 발견하지 못했습니다 com.google.common.base.Objects. 유망 해 보이지만 비슷한 것이 없습니다.


Objects.firstNonNull추가로 Guava 10.0 은 이러한 유형의 문제에 대한보다 일반적인 솔루션으로 Optional 클래스를 추가했습니다 .

An Optional은 값을 포함 할 수도 있고 포함하지 않을 수도 있습니다. Optional인스턴스 를 만드는 방법에는 여러 가지가 있지만 귀하의 경우에는 팩토리 방법 Optional.fromNullable(T)이 적합합니다.

를 가지고 있으면 메서드 Optional중 하나를 사용 하여 포함 된 값 ( or값이 Optional포함 된 경우) 또는 다른 값 (없는 경우) 을 가져올 수 있습니다.

모두 종합하면 간단한 예는 다음과 같습니다.

T value = Optional.fromNullable(obj).or(defaultValue);

기본값으로 Optionala를 사용하려는 경우 Supplier(필요하지 않은 경우 계산을 수행하지 않음) 또는 존재하는 첫 번째 값을 얻기 위해 여러 선택적 값을 함께 연결하려는 경우 추가 유연성이 제공됩니다 . 예를 들면 :

T value = someOptional.or(someOtherOptional).or(someDefault);

어때

MoreObjects.firstNonNull(obj, default)

JavaDoc을 참조하십시오 .

(역사적 참고 사항 : MoreObjects클래스는 이전에라고 불렸지만 Java 7에 도입 된 클래스 Objects와의 혼동을 피하기 위해 이름이 변경되었습니다 java.util.Objects. Guava Objects클래스는 이제 사실상 더 이상 사용되지 않습니다.)


이전에 언급했듯이 Guava 솔루션이 정확합니다.

그러나 Java 8 에는 순수한 JDK 솔루션이 있습니다 .

Optional.ofNullable( var ).orElse( defaultValue );

문서 참조 java.util.Optional


이것은 트릭을 수행해야합니다 : 구아바 API 문서Objects.firstNonNull(o, default)
참조


객체가 아직 Optional이 아닌 경우 Optional / firstNotNull 제안은 간단한 Java 기능인 삼항 연산자를 복잡하게 만듭니다.

T myVal = (val != null) ? val : defaultVal;

종속성 및 여러 메서드 호출을 포함하면 삼항 연산자만큼 복잡한 읽기가 발생합니다. 나는 심지어 Optional'내 방법이 객체를 반환 할 수도 있고 아닐 수도있다'라는 의미론과 반대로 사용 하는 것은 당신이 뭔가를 잘못하고 있다는 붉은 깃발이라고 주장 할 것입니다 (그것의 의미 론적 의미에 반하는 것을 남용하는 다른 경우와 마찬가지로).

삼항 연산자에 대한 자세한 내용은 http://alvinalexander.com/java/edu/pj/pj010018참조하십시오 .


문자열에 대해서만 이야기하는 경우 Apache Commons defaultString 및 defaultIfEmpty 메서드도 있습니다.

defaultString은 true null에만 기본값을 제공하는 반면 defaultIfEmpty는 null 또는 빈 문자열에 대한 기본값을 제공합니다.

빈 문자열에서도 기본값을 제공하는 defaultIfBlank도 있습니다.

예 :

String description = "";
description = StringUtils.defaultIfBlank(description, "Theodore"); 

설명은 이제 "Theodore"와 같습니다.

편집 : Apache Commons에는 완전히 구운 객체에 대해 null 기본값을 수행하는 ObjectUtils 클래스도 있습니다.


참고로 Java 9에는 원하는 작업을 정확히 수행하는 두 가지 메서드가 있습니다.

public static <T> T requireNonNullElse(T obj, T defaultObj);

그리고 게으른 버전 :

public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier)

java.util.Objects 및 Guava의 선택 사항은 null을 기본값으로 재정의하는 좋은 방법을 제공합니다.

그러나 여기에 더 명령적인 마음이 있습니다.

public static <T> T firstNotNuLL(T...args){
    for (T arg : args)
        if ( arg != null) return arg;
    throw new NullPointerException();  
}

Optional내장 된 Guava 10을 사용하는 것을 고려하십시오 . Optional.fromNullable(var).orNull()또는 같은 여러 옵션을 함께 연결할 수 있습니다.Optional.fromNullable(var).or(Optional.of(var2)).orNull()


org.apache.commons.lang3 라이브러리 ObjectUtils.defaultIfNull()에서 사용할 수 있습니다 .

public static <T> T defaultIfNull(T object, T defaultValue)

참조 URL : https://stackoverflow.com/questions/8039504/how-to-convert-a-possible-null-value-to-a-default-value-using-guava

반응형