亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

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

public class IsEntity1 {

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

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

public class IsEntity2 {

    private boolean success;

    public boolean isSuccess() {
        return success;
    }

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

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

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

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

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

答案是自己寫get方法,不用idea自動生成的get方法。

如下:

public boolean getIsSuccess() {
	return isSuccess;
}

這樣,再將實體類轉(zhuǎn)為json字符串時,就會認(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

    Java之idea @NotNull @Nullable 注解使用

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

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

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

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

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

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

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

    spring cloud 配置中心native配置方式

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

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

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

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

    這篇文章主要介紹了java 微信隨機(jī)紅包算法的相關(guān)資料,并附實例代碼,需要的朋友可以參考下
    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元素,那么請使用Iterator方式,如果存在并發(fā),那么你一定要選擇加鎖,需要的朋友可以參考下
    2023-12-12
  • 使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra

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

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

    springBoot2.6.2自動裝配之注解源碼解析

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

最新評論