null Boolean이 true인지 여부를 확인합니다. 결과는 예외입니다.
다음 코드가 있습니다.
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
부울 변수 "bool"을 조회하면 예외가 발생하는 이유는 무엇입니까?사실이 아닌 것처럼 보일 때 if 문구를 그냥 지나쳐야 하지 않을까요?if 문을 삭제하거나 null이 아닌지 확인하면 예외가 사라집니다.
추가 Null 체크를 원하지 않는 경우:
if (Boolean.TRUE.equals(value)) {...}
이 있는 경우boolean
둘 중 하나일 수 있다true
또는false
하지만 당신이 가지고 있는 것은Boolean
둘 중 하나일 수 있다Boolean.TRUE
,Boolean.FALSE
또는null
다른 물건과 마찬가지로요
특정의 경우,Boolean
이null
및 그if
스테이트먼트는 암묵적인 변환을 트리거합니다.boolean
그 결과,NullPointerException
대신 다음 사항이 필요할 수 있습니다.
if(bool != null && bool) { ... }
Apache Boolean Utils를 사용합니다.
(프로젝트에서 퍼포먼스를 최대화하는 것이 가장 중요한 경우 외부 라이브러리를 포함할 필요가 없는 네이티브 솔루션에 대한 다른 답변 중 하나를 참조하십시오.)
수레바퀴를 재발명하지 마세요.이미 구축한 것을 활용하여 사용isTrue()
:
BooleanUtils.isTrue( bool );
a의 여부를 확인합니다.Boolean
값은 True, 처리null
되돌림으로써false
.
포함할 수 있는 라이브러리로 한정되지 않은 경우, 다음과 같은 모든 종류의 사용 사례에 적합한 도우미 기능이 많이 있습니다.Booleans
그리고.Strings
다양한 Apache 라이브러리를 읽어보시고 이미 제공되는 기능을 확인하시기 바랍니다.
또는 Java 8 Optional의 기능을 사용하여 다음과 같은 트릭을 수행할 수도 있습니다.
Optional.ofNullable(boolValue).orElse(false)
:)
Boolean
타입은 다음과 같습니다.null
. 해야 돼요.null
설정한 대로 확인하다null
.
if (bool != null && bool)
{
//DoSomething
}
Boolean은 원시 부울의 개체 래퍼 클래스입니다.이 클래스는 모든 클래스와 마찬가지로 null일 수 있습니다.퍼포먼스와 메모리상의 이유로 항상 프리미티브를 사용하는 것이 가장 좋습니다.
Java API의 래퍼 클래스는 주로 다음 두 가지 목적으로 사용됩니다.
- 오브젝트 내의 프리미티브 값을 "랩"하여 오브젝트용으로 예약된 액티비티(예: 컬렉션에 추가되는 액티비티에 포함되거나 오브젝트 반환값이 포함된 메서드에서 반환됨)에 포함할 수 있도록 하는 메커니즘을 제공합니다.
- 원소를 위한 각종 효용 기능을 제공한다.이러한 함수의 대부분은 다양한 변환과 관련되어 있습니다.예를 들어 String 객체와의 변환, 바이너리, 8진수, 16진수 등 서로 다른 베이스(또는 기수)와의 변환 등입니다.
http://en.wikipedia.org/wiki/Primitive_wrapper_class
변수 bool이 null을 가리키고 있기 때문에 항상 null Pointer를 얻을 수 있습니다.예외적으로 먼저 null이 아닌 값을 사용하여 변수를 초기화하고 수정해야 합니다.
if (bool)
됩니다.if (bool.booleanValue())
그리고 그것은 나를 혼란스럽게 할 것이다.NPE
bool
null
.
Null 박스 부울 평가에 대한 기타 솔루션:
JDK 9+
import static java.util.Objects.requireNonNullElse; if (requireNonNullElse(bool, false)) { // DoSomething
구글 구아바 18 이상
import static com.google.common.base.MoreObjects.firstNonNull; if (firstNonNull(bool, false)) { // DoSomething
false
빈 케이스
Objects.equals()
K-ballo가 받아들인 답변은 문제될 것이 없다.만약 당신이 하나의 간단한 조건을 선호하고 나를 좋아한다면, 당신은 요다 조건을 좋아하지 않는다. 왜냐하면 java 1.7은 다음과 같다.
if (Objects.equals(bool, true)) {
아니면 동시에 정말 노골적으로 말하는 게 더 좋아한다면
if (Objects.equals(bool, Boolean.TRUE)) {
또는 문제 회피
쓰는 하지 않습니다.Boolean
에서는, 「」, 「」, 「」를 사용할 수 있습니다.Boolean
로 언급하다null
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★NullPointerException
해서 상태3가지 값을 하는 것이 좋습니다3가지 상태 로직이 필요한 경우 3가지 값을 가진 열거형을 정의하는 것이 좋습니다.를 들면, 「」
enum MyTristateBoolean { FALSE, DONT_KNOW, TRUE }
없다null
'중간 상수'라고 ?UNKNOWN
,UNDEFINED
,NOT_EXISTING
을 사용법을 대도 NULL
것은 다음 두 가지 중 .이제 취향에 따라 비교가 다음 두 가지 중 하나가 됩니다.
if (myBool.equals(MyTristateBoolean.TRUE)) {
if (myBool == MyTristateBoolean.TRUE) {
컴파일러는 각 열거 상수의 인스턴스가 1개만 있음을 보증하기 때문에 후자는 동작합니다.도 아시겠지만==
는, 이 아닌 오브젝트와의 equalenum은 타입의 입니다.
언급URL : https://stackoverflow.com/questions/11005286/check-if-null-boolean-is-true-results-in-exception
'source' 카테고리의 다른 글
Java Key Store에 PEM Import (0) | 2022.07.23 |
---|---|
VueJ - 빌드 후 여러 js 파일이 dist에 있음 (0) | 2022.07.23 |
vue + axios를 사용하여 비동기 / wait in get 요청을 사용하는 방법 (0) | 2022.07.23 |
Nuxt에서는 한 모듈의 Vuex 상태를 다른 모듈에서 변환하려면 어떻게 해야 합니까? (0) | 2022.07.23 |
Vue Post 함수가 null 본문을 전송합니다. (0) | 2022.07.17 |