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);
기본값으로 Optional
a를 사용하려는 경우 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)
'programing' 카테고리의 다른 글
EditText 요청 포커스 (0) | 2021.01.16 |
---|---|
상태가 내 클래스로 구성된 경우 Android에서 방향 변경 중 상태를 저장하는 방법은 무엇입니까? (0) | 2021.01.16 |
쉼표와 포인트를 사용하여 문자열을 이중으로 구문 분석 (0) | 2021.01.16 |
Android : APK 설치 중 오류 (0) | 2021.01.16 |
NSDate를 가장 가까운 5 분으로 반올림 (0) | 2021.01.16 |