日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

新来个技术总监:谁在用isXxx形式定义布尔类型年后不用来了

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新来个技术总监:谁在用isXxx形式定义布尔类型年后不用来了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

△Hollis, 一個對Coding有著獨特追求的人△

這是Hollis的第?384?篇原創分享

作者 l Hollis

來源 l Hollis(ID:hollischuang)

在日常開發中,我們會經常要在類中定義布爾類型的變量,比如在給外部系統提供一個RPC接口的時候,我們一般會定義一個字段表示本次請求是否成功的。

關于這個”本次請求是否成功”的字段的定義,我見過很多不同的開發者,定義的方式都不同,尤其是在屬性的命名上,有人用 success,有人用 isSuccess 表示。

從語義上面來講,兩種命名方式都可以講的通,并且也都沒有歧義。那么還有什么原則可以參考來讓我們做選擇呢。

根據JavaBeans Specification規定,如果是普通的參數propertyName,要以以下方式定義其setter/getter:

public?<PropertyType>?get<PropertyName>();public?void?set<PropertyName>(<PropertyType>?a);

但是,布爾類型的變量propertyName則是單獨定義的:

public?boolean?is<PropertyName>();public?void?set<PropertyName>(boolean?m);

success方法的 getter 應該是isSuccess/getSuccess,而isSuccess的getter 應該是isIsSuccess/getIsSuccess。

但是很多人,在使用isSuccess作為屬性名的時候,還是會采用isSuccess/getSuccess作為 getter 方法名,尤其是現在的很多 IDE 在默認生成 getter 的時候也是會生成isSuccess。

在一般情況下,其實是沒有影響的。但是有一種特殊情況就會有問題,那就是發生序列化的時候可能會導致參數轉換異常。

我們先來定義一個 JavaBean:

class?Model?implements?Serializable?{private?static?final?long?serialVersionUID?=?1836697963736227954L;private?boolean?isSuccess;public?boolean?isSuccess()?{return?isSuccess;}public?void?setSuccess(boolean?success)?{isSuccess?=?success;}public?String?getHollis(){return?"hollischuang";}}

在這個 JavaBean 中,有一個成員變量isSuccess,三個方法,分別是IDE幫我們自動生成的isSuccess和setSuccess,另外一個是作者自己增加的一個符合getter命名規范的方法。

我們分別使用不同的 JSON 序列化工具來對這個類的對象進行序列化和反序列化:

public?class?BooleanMainTest?{public?static?void?main(String[]?args)?throws?IOException?{//定一個Model類型Model?model?=?new?Model();model.setSuccess(true);//使用fastjson(1.2.16)序列化model成字符串并輸出System.out.println("Serializable?Result?With?fastjson?:"?+?JSON.toJSONString(model));//使用Gson(2.8.5)序列化model成字符串并輸出Gson?gson?=new?Gson();System.out.println("Serializable?Result?With?Gson?:"?+gson.toJson(model));//使用jackson(2.9.7)序列化model成字符串并輸出ObjectMapper?om?=?new?ObjectMapper();System.out.println("Serializable?Result?With?jackson?:"?+om.writeValueAsString(model));}}

以上代碼輸出結果:

Serializable?Result?With?fastjson?:{"hollis":"hollischuang","success":true}Serializable?Result?With?Gson?:{"isSuccess":true}Serializable?Result?With?jackson?:{"success":true,"hollis":"hollischuang"}

在fastjson和jackson的結果中,原來類中的isSuccess字段被序列化成success,并且其中還包含hollis值。而Gson中只有isSuccess字段。

我們可以得出結論:fastjson和jackson在把對象序列化成json字符串的時候,是通過反射遍歷出該類中的所有getter方法,得到getHollis和isSuccess,然后根據JavaBeans規則,他會認為這是兩個屬性hollis和success的值。直接序列化成json:

{“hollis”:”hollischuang”,”success”:true}

但是Gson并不是這么做的,他是通過反射遍歷該類中的所有屬性,并把其值序列化成json:

{“isSuccess”:true}

可以看到,由于不同的序列化工具,在進行序列化的時候使用到的策略是不一樣的,所以,對于同一個類的同一個對象的序列化結果可能是不同的。那么,如果我們把一個對象使用fastjson進行序列化,再使用Gson反序列化會發生什么呢?

public?class?BooleanMainTest?{public?static?void?main(String[]?args)?throws?IOException?{Model?model?=?new?Model();model.setSuccess(true);Gson?gson?=new?Gson();System.out.println(gson.fromJson(JSON.toJSONString(model),Model.class));}}

以上代碼,輸出結果:

Model[isSuccess=false]

這和我們預期的結果完全相反,原因是因為JSON框架通過掃描所有的getter后發現有一個isSuccess方法,然后根據JavaBeans的規范,解析出變量名為success,把model對象序列化城字符串后內容為{"success":true}。

根據{"success":true}這個json串,Gson框架在通過解析后,通過反射尋找Model類中的success屬性,但是Model類中只有isSuccess屬性,所以,最終反序列化后的Model類的對象中,isSuccess則會使用默認值false。

但是,一旦以上代碼發生在生產環境,這絕對是一個致命的問題。

所以,作為開發者,我們應該想辦法盡量避免這種問題的發生。

所以,建議大家使用success而不是 isSuccess 這種形式。這樣,該類里面的成員變量時success,getter方法是isSuccess,這是完全符合JavaBeans規范的。無論哪種序列化框架,執行結果都一樣。就從源頭避免了這個問題。

技術交流群

最近有很多人問,有沒有讀者交流群,想知道怎么加入。

最近我創建了一些群,大家可以加入。交流群都是免費的,只需要大家加入之后不要隨便發廣告,多多交流技術就好了。

目前創建了多個交流群,全國交流群、北上廣杭深等各地區交流群、面試交流群、資源共享群等。

有興趣入群的同學,可長按掃描下方二維碼,一定要備注:全國 Or 城市 Or 面試 Or 資源,根據格式備注,可更快被通過且邀請進群。

▲長按掃描

往期推薦

為什么不建議你用去 “! = null” 做判空?


37歲程序員被裁,120天沒找到工作,無奈去小公司,結果懵了...


北大韋神透露現狀:自己課講得不太好,中期學生退課后就剩下5、6個人...

如果你喜歡本文,

請長按二維碼,關注?Hollis.

轉發至朋友圈,是對我最大的支持。

點個?在看?

喜歡是一種感覺

在看是一種支持

↘↘↘

總結

以上是生活随笔為你收集整理的新来个技术总监:谁在用isXxx形式定义布尔类型年后不用来了的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 97久久精品| 国模大胆一区二区三区 | 午夜电影天堂 | 青青草福利视频 | 亚洲天堂一区二区在线观看 | 动漫美女无遮挡免费 | 国产福利在线视频 | av免费看网址 | 成人理论影院 | 亚洲精品2 | 亚洲av成人无码一区二区三区在线观看 | 国产美女作爱全过程免费视频 | 日韩免费一区二区 | 欧美成人免费观看视频 | 欧美cccc极品丰满hd | 一级欧美一级日韩片 | 物业福利视频 | 亚洲精品国产av | 亚洲av无码一区二区乱子伦as | 99精品影视 | 国产农村妇女精品一二区 | 日韩精品一区二区三区中文字幕 | 亚洲av无码专区国产乱码不卡 | 三级中文字幕在线 | 草草影院发布页 | 中文在线永久免费观看 | 久久国产麻豆 | 久草高清视频 | 欧美yyy| 国产精品一区久久 | 日韩福利在线视频 | 久久国产美女 | 99久久久无码国产精品6 | 538国产精品一区二区免费视频 | 友田真希一区二区 | 亚洲国产精品av | 操丰满女人 | 欧美精品黑人猛交高潮 | 美女av影院 | 国产suv精品一区二区68 | 黄色动漫免费在线观看 | 黑花全肉高h湿play短篇 | 免费成人深夜夜 | 欧美一区二区三区在线观看视频 | 99免费在线视频 | 亚洲天堂小视频 | 国产精品一级片 | 伊人免费在线观看高清版 | 国产一级片一区 | 久久久久久久久久久久久久久久久久久久 | 国产黄a三级三级三级看三级男男 | 欧美性色黄 | 中文一区二区在线播放 | 欧美交换国产一区内射 | 国产高潮又爽又无遮挡又免费 | 国产农村妇女精品 | 日韩欧美一区二区三区在线观看 | 国产亚洲一区二区三区在线观看 | 欧美国产乱视频 | 欧美区一区二区三 | 99国产精品自拍 | 中文字幕在线观看网址 | 精品国产一区二区三区噜噜噜 | 久久亚洲精少妇毛片午夜无码 | 久久密av | 亚洲女同女同女同女同女同69 | 国产精品免费无遮挡无码永久视频 | 99久久精品国产色欲 | a视频在线免费观看 | 免费一区二区在线观看 | 性感美女毛片 | 夜夜欢视频 | 国产成人久久精品流白浆 | 免费视频成人 | 免费一级特黄特色大片 | 亚洲国产精品成人无码区 | 毛片1000部免费看 | 欧美精品小视频 | 抱着老师的嫩臀猛然挺进视频 | 中文字幕一区二区三区人妻四季 | 欧美色综合天天久久综合精品 | 日产精品久久久一区二区 | 国产精品国产精品 | 国产特黄aaaaa毛片 | 91成人黄色 | 国产美女精品久久久 | av在线不卡免费 | 黄色片在线免费观看 | 国产激情无套内精对白视频 | 一区二区三区在线视频播放 | www.youjizz.com视频 | 涩av | 亚洲成人av影片 | 日本一区二区三区中文字幕 | 不卡av在线免费观看 | 91香蕉在线视频 | 日韩精品久久 | 国产精品无码一本二本三本色 | 视频在线免费观看 |