1. 程式人生 > >JavaBean中布林型別使用注意

JavaBean中布林型別使用注意

JavaBean是一個標準,遵循標準的Bean是一個帶有屬性和getters/setters方法的Java類。

JavaBean的定義很簡單,但是還有有一些地方需要注意,例如Bean中含有boolean型別的屬性。我們知道對於一個屬性來說,如果其命名為test,那麼其getter和setter方法一般為getTest()和setTest。但是如果test為一個布林型別,那麼其getter和setter方法為isTest()和setTest()。這是一個區別

public class BeanTest {
    private boolean test;

    public boolean
isTest() { return test; } public void setTest(boolean test) { this.test = test; } }

如果我們將這個屬性名換為isTest,那麼其生成的getter和setter方法,居然和屬性為test時的一樣

public class BeanTest1 {
    private boolean isTest;

    public boolean isTest() {
        return isTest;
    }

    public void
setTest(boolean test) { isTest = test; } }

這個區別在一般的情況下是沒有影響的,但是如果涉及到和json串之間的轉換,就得注意了。例如,如果我將上面的兩個Bean的物件Json化,其結果居然是一樣的

public static void main(String[] args) {
    System.out.println(JSON.toJSONString(new Bean1())); //{"test":false}
    System.out.println(JSON.toJSONString(new Bean2())); //{"test":false}
}

如果,我想要生成{“isTest”:false}這樣的Json串,那麼我們的Bean該怎麼定義呢?這時候我們不該依賴於IDEA自動幫我們生成,我們必須手動編寫:

public class Bean3{
    private boolean isTest;

    public boolean getIsTest(){
        return isTest;
    }
    public void setIsTest(boolean isTest){
        this.isTest = isTest;
    }
}

雖然這樣生成了我們想要的json串,但是這樣沒有遵循Java規範,感覺很彆扭。。。。我們可以使用@JSONField來指定json化後對應的欄位名

另外,如果屬性是boolean的包裝型別Boolean,那麼JavaBean定義的getter和setter方法又為什麼呢?

public class Bean4{
    private Boolean test;

    public Boolean getTest() {
        return test;
    }

    public void setTest(Boolean test) {
        this.test = test;
    }
}

public class Bean5{
    private Boolean isTest;

    public Boolean getTest() {
        return isTest;
    }

    public void setTest(Boolean test) {
        isTest = test;
    }
}

我們發現Boolean型別和boolean型別屬性的get和set方法也是有差別的。

總的來說,為了避免麻煩,不管是定義Boolean型別的屬性,還是定義boolean型別的屬性,其欄位名不要使用isXXX這種方式,然後按照Bean規範生成get和set方法就好了