2013-03-04 59 views
2

有類如我如何檢查空條件的布爾變量

package com; 

public class Person { 
boolean registered; 

public boolean isRegistered() { 
    return registered; 
} 

public void setRegistered(boolean registered) { 
    this.registered = registered; 
} 
} 

數據,以Person對象將根據數據存在於數據庫進行設置。 問題是,對於較舊的記錄,註冊的字段不存在。

所以我如何測試如果提交的是否存在?

package com;

public class Test { 

    public static void main(String args[]) { 
     Person per = new Person(); 

     if (per.isRegistered()) { 

     } 
    } 

} 

我該如何檢查per.isRegistered()字段是否存在或不是該人物對象?

+0

你總是可以只註冊布爾值默認爲false,因爲如果該字段沒有設置,你可以假定它沒有登記。 – Supericy 2013-03-04 11:35:31

回答

5

boolean是原始數據類型,不能爲null,只能是true或false。但是Boolean作爲布爾數據類型的說唱者的對象,可能是空的,並且Boolean.TRUEBoolean.FALSE;

public class Person { 
    Boolean registered; 
    ... 
} 

...

Person per = new Person(); 

if (per.isRegistered()!=null) { 
    if(!per.isRegistered()){ 
     ... 
    }else{ 
     ... 
    } 
} 
6

Person類目前被定義,你不能,因爲boolean(基本類型)沒有null價值,只有truefalse的方式。

可能使用Boolean(對象當量),可以是nullBoolean.TRUE,或Boolean.FALSE

但更有可能你想在更深層次上解決這個問題。你說過你的數據庫中有這個字段不存在的數據。這些記錄是否被考慮登記?你的班級應該反映這個問題的答案。

+1

它通常在實踐中發生的方式,答案是依賴於上下文的,而不是該類的屬性。業務邏輯通常最好用代碼和數據的清晰分離來完成。 – 2013-03-04 11:38:07

3

boolean不能null;你需要使用(Boolean)或構建一個複合型。

1

可以使用Boolean(大寫B)類,允許NULL值同類引用。

或者,您也可以使用enum有。三個可能的值:NOT_AVAILABLEYESNO這有一個更清晰的語義,並允許您在以後添加其他可能的值(如果需要)

1

你需要一個三個態布爾;真,假不存在

您可以通過使用布爾類而不是原始布爾值來實現此目的,並使用null作爲「不存在」指示符。

0

boolean registered的領域它默認爲false。此外booleanObject類沒有關係,但原始值,所以根本不能是null

只有一個空指針你可能會在這裏它的時候pernull

0

使列可空,並使用布爾而不是布爾的。對於具體的問題,我認爲你可以假設如果它是空的用戶沒有註冊。

0

您必須擴展person類才能在測試類中使用它。 您還必須定義布爾值。

1

我真的不明白你的想法。但是如果你想處理一個布爾值,它的值可以是下列值之一{true/false/null},你應該使用一個Boolean對象,它是一個簡單的boolean包裝器,但是它可以取值null值(因爲每個Java對象都可以被設置爲空)。

0

您應該使用Optional

if (Optional.ofNullable(per.isRegistered()).orElse(false)) { 
    // ... 
}