欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解Java屬性為什么不能是is開頭的boolean

 更新時(shí)間:2024年10月08日 10:31:11   作者:spring_root  
在Java實(shí)體類定義中,boolean類型的屬性命名常引發(fā)爭議,阿里巴巴Java開發(fā)手冊(cè)建議避免使用is作為布爾類型屬性的前綴,原因在于當(dāng)實(shí)體類被序列化或反序列化時(shí),基于JavaBean規(guī)范的框架可能會(huì)移除或忽略is,導(dǎo)致不一致的字段名,文中介紹的非常詳細(xì),需要的朋友可以參考下

通常定義Java實(shí)體類時(shí),對(duì)于boolean屬性,阿里規(guī)約中明確要求不能使用is開頭。

至于為什么,我們稍后再講。

這里先講一下前幾天在工作中,項(xiàng)目遇到的一個(gè)問題。庫表中某個(gè)字段存入了一個(gè)實(shí)體類的json字符串,在查詢庫表后,需要將json字符串轉(zhuǎn)為實(shí)體類對(duì)象進(jìn)行更改后再轉(zhuǎn)為json字符串后返回給前端。

在這當(dāng)中就出現(xiàn)了一個(gè)問題,庫表中存入的數(shù)據(jù)明明是isUpdate的字段,可是在返回到前端后的代碼就是update
這個(gè)問題,起初并沒有想到是字段定義的問題,通過一步一步的debug,最后才發(fā)現(xiàn)是實(shí)體類中isUpdate字段的問題,在通過json解析后就轉(zhuǎn)成了update返回給了前端。

下面講一下,為什么會(huì)出現(xiàn)isUpdate變成update的問題。

首先,我們先定義一個(gè)Java實(shí)體類,包含一個(gè)is開頭的屬性,如isSuccess,再使用idea自動(dòng)生成的get/set,看看是什么樣子。

public class IsEntity1 {

    private boolean isSuccess;   
    
    public boolean isSuccess() {
    	return isSuccess;        
    }  
    
    public void setSuccess(boolean success) {
    	isSuccess = success;        
    }   
    
}

然后再定義一個(gè)Java實(shí)體類,不是用is開頭的屬性,如success,再使用idea自動(dòng)生成的get/set,看看是什么樣子。

public class IsEntity2 {

    private boolean success;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }
    
}

此時(shí),會(huì)發(fā)現(xiàn)無論你是用is開頭或者不用is開頭定義屬性,使用idea自動(dòng)生成的get/set都是一個(gè)樣子的,而且在setSuccess的時(shí)候,會(huì)將is省略掉。這里就是項(xiàng)目中遇到的問題所在。

因?yàn)楫?dāng)類進(jìn)行序列化時(shí),有些框架的序列化會(huì)根據(jù)JavaBean的屬性進(jìn)行序列化,而部分框架是根據(jù)JavaBean的getter方法進(jìn)行序列化,這就會(huì)導(dǎo)致在反序列化時(shí)與實(shí)體類的屬性對(duì)應(yīng)不上。

比如說將IsEntity1轉(zhuǎn)換為json字符串時(shí),會(huì)根據(jù)實(shí)體類中的get方法進(jìn)行序列化取isSuccess的值,而使用idea自動(dòng)生成的get方法直接就是public boolean isSuccess()方法,在取值的時(shí)候會(huì)認(rèn)定success是字段名,就會(huì)取成success,與原來定義的字段不同。

如果非要使用is開頭來定義字段,怎么才能保證json解析過程是正確的呢

答案是自己寫get方法,不用idea自動(dòng)生成的get方法。

如下:

public boolean getIsSuccess() {
	return isSuccess;
}

這樣,再將實(shí)體類轉(zhuǎn)為json字符串時(shí),就會(huì)認(rèn)定isSuccess是字段名。

還有一種方法,就是使用JSONField注解

    @JSONField(name = "isSuccess")
    private boolean isSuccess;

雖然這些方法都可以解決json解析過程丟失is的問題,但是為了避免出現(xiàn)這種問題,我們最好還是遵守規(guī)約,不使用is開頭定義字段。

總結(jié)

到此這篇關(guān)于Java屬性為什么不能是is開頭的boolean的文章就介紹到這了,更多相關(guān)Java屬性不能是is開頭的boolean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之idea @NotNull @Nullable 注解使用

    Java之idea @NotNull @Nullable 注解使用

    這篇文章主要介紹了Java之idea @NotNull @Nullable 注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • spring-data-redis連接操作redis的實(shí)現(xiàn)

    spring-data-redis連接操作redis的實(shí)現(xiàn)

    spring-data-redis則是對(duì)Jedis進(jìn)行了高度封裝,使用起來非常方便。本文主要介紹了spring-data-redis連接操作redis的實(shí)現(xiàn),感興趣的可以了解一下
    2021-07-07
  • SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換實(shí)踐

    SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換實(shí)踐

    這篇主要介紹了SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換,本文基于AOP來實(shí)現(xiàn)數(shù)據(jù)源的切換,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法

    Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法

    本文主要介紹了Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • spring cloud 配置中心native配置方式

    spring cloud 配置中心native配置方式

    這篇文章主要介紹了spring cloud 配置中心native配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot實(shí)現(xiàn)多文件上傳的詳細(xì)示例代碼

    SpringBoot實(shí)現(xiàn)多文件上傳的詳細(xì)示例代碼

    文件上傳中并沒有什么太多的知識(shí)點(diǎn),下面這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)多文件上傳的詳細(xì)示例,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • java 微信隨機(jī)紅包算法代碼實(shí)例

    java 微信隨機(jī)紅包算法代碼實(shí)例

    這篇文章主要介紹了java 微信隨機(jī)紅包算法的相關(guān)資料,并附實(shí)例代碼,需要的朋友可以參考下
    2016-10-10
  • Java中的forEach循環(huán)詳細(xì)解讀

    Java中的forEach循環(huán)詳細(xì)解讀

    這篇文章主要介紹了Java中的forEach循環(huán)詳細(xì)解讀,不要再foreach循環(huán)里面進(jìn)行元素的add和remove,如果你非要進(jìn)行remove元素,那么請(qǐng)使用Iterator方式,如果存在并發(fā),那么你一定要選擇加鎖,需要的朋友可以參考下
    2023-12-12
  • 使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra

    使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra

    這篇文章主要介紹了使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • springBoot2.6.2自動(dòng)裝配之注解源碼解析

    springBoot2.6.2自動(dòng)裝配之注解源碼解析

    對(duì)于springboot個(gè)人認(rèn)為它就是整合了各種組件,然后提供對(duì)應(yīng)的自動(dòng)裝配和啟動(dòng)器(starter),基于這個(gè)流程去實(shí)現(xiàn)一個(gè)定義的裝配組件,下面這篇文章主要給大家介紹了關(guān)于springBoot2.6.2自動(dòng)裝配之注解源碼解析的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評(píng)論