source

null Boolean이 true인지 여부를 확인합니다. 결과는 예외입니다.

goodcode 2022. 7. 23. 14:13
반응형

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다른 물건과 마찬가지로요

특정의 경우,Booleannull및 그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의 래퍼 클래스는 주로 다음 두 가지 목적으로 사용됩니다.

  1. 오브젝트 내의 프리미티브 값을 "랩"하여 오브젝트용으로 예약된 액티비티(예: 컬렉션에 추가되는 액티비티에 포함되거나 오브젝트 반환값이 포함된 메서드에서 반환됨)에 포함할 수 있도록 하는 메커니즘을 제공합니다.
  2. 원소를 위한 각종 효용 기능을 제공한다.이러한 함수의 대부분은 다양한 변환과 관련되어 있습니다.예를 들어 String 객체와의 변환, 바이너리, 8진수, 16진수 등 서로 다른 베이스(또는 기수)와의 변환 등입니다.

http://en.wikipedia.org/wiki/Primitive_wrapper_class

변수 bool이 null을 가리키고 있기 때문에 항상 null Pointer를 얻을 수 있습니다.예외적으로 먼저 null이 아닌 값을 사용하여 변수를 초기화하고 수정해야 합니다.

if (bool)됩니다.if (bool.booleanValue())그리고 그것은 나를 혼란스럽게 할 것이다.NPEboolnull.

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

반응형