当前位置: 首页 > wzjs >正文

网站风格包括什么怎么做pc端移动网站

网站风格包括什么,怎么做pc端移动网站,poedit pro wordpress,无锡中小企业网站制作在POJO类中为布尔类型的变量添加is前缀是一个需要避免的常见陷阱,尤其是在涉及到序列化/反序列化的场景下。 原因分析: JavaBean 规范与 Getter 命名冲突: 根据 JavaBean 规范,布尔属性的 Getter 方法的标准命名是 isPropertyNam…

在POJO类中为布尔类型的变量添加is前缀是一个需要避免的常见陷阱,尤其是在涉及到序列化/反序列化的场景下。

原因分析:

  1. JavaBean 规范与 Getter 命名冲突:

    • 根据 JavaBean 规范,布尔属性的 Getter 方法的标准命名是 isPropertyName()
    • 例如,一个名为 active 的布尔属性,其 Getter 应该是 isActive()
    • 问题在于: 如果你直接把字段命名为 isActive
      • 字段名:private boolean isActive;
      • 按照 JavaBean 规范,它的 Getter 应该是 isIsActive() (这看起来很别扭)。
      • 但是,开发者通常会(也更自然地)写成 isActive() 作为 Getter。
    • 这导致了字段名 (isActive) 和符合规范的 Getter 方法名 (isIsActive) 之间的不一致。开发者实际写的 Getter (isActive()) 并不严格符合从字段名推导出的规范。
  2. 序列化框架的工作原理:

    • 许多流行的序列化框架(如 Jackson, Gson, Fastjson)在序列化对象为 JSON/XML 或其他格式时,默认行为是使用 Getter 方法(或者通过反射直接访问字段,但行为可配置)来确定属性的名称
    • 框架通常有一套规则来“推断”序列化后的属性名:
      • 常见策略是去掉 Getter 方法名的 getis 前缀,并将剩余部分的首字母小写
      • 对于 isActive() 这个 Getter:
        • 去掉 is -> Active
        • 首字母小写 -> active
      • 所以,框架期望序列化后的 JSON 键名是 "active"
    • 冲突点: 如果你的字段名是 isActive,并且框架配置为按字段名序列化(有些框架可以这样配置,或者某些库的特定版本/配置),那么它可能会试图使用字段名 isActive 作为键名。
    • 结果就是:同一个属性,Getter 暗示键名是 "active",而字段名暗示键名是 "isActive"。这种不一致性是问题的根源。
  3. 序列化错误的表现:

    • 序列化时: 框架可能根据 Getter (isActive()) 输出键名 "active"。但如果你期望或某些配置期望的是字段名 "isActive",那么消费这个 JSON 的系统就会找不到预期的 "isActive" 字段。
    • 反序列化时: 当框架收到一个包含 "isActive": true 的 JSON 时:
      • 如果框架主要依赖 Getter/Setter,它可能会寻找一个名为 setActive(boolean) 的 Setter 或一个名为 active 的字段来设置值。它很可能找不到名为 setIsActive 的 Setter 或直接匹配 isActive 字段的访问方式(如果框架规则是去掉 is 前缀推断属性名)。
      • 如果框架配置为优先使用字段名,它可能会尝试直接设置 isActive 字段,这有时能工作,但破坏了 JavaBean 约定的统一性,并且在存在 Getter/Setter 时行为可能变得复杂或不可预测。
    • 最终结果通常是:反序列化时无法正确地将 JSON 中的 isActive 值设置到 POJO 对象的 active 属性上,导致该属性保持默认值 (false)。或者序列化出的键名不符合预期,导致下游解析错误。

最佳实践:

  1. 直接使用描述状态的形容词命名布尔字段,不加 is

    • private boolean active; (推荐)
    • private boolean enabled;
    • private boolean valid;
    • private boolean available;
  2. 提供符合 JavaBean 规范的 Getter:

    • public boolean isActive() { return active; } (正确)
    • public boolean isValid() { return valid; } (正确)
  3. 提供符合规范的 Setter:

    • public void setActive(boolean active) { this.active = active; } (正确)
    • public void setValid(boolean valid) { this.valid = valid; } (正确)

为什么这样做能解决问题?

  • 字段名 (active) 清晰描述了状态。
  • Getter (isActive()) 严格符合 JavaBean 规范 (is + 首字母大写的属性名)。
  • Setter (setActive()) 严格符合 JavaBean 规范 (set + 首字母大写的属性名)。
  • 序列化框架的行为变得一致:
    • 无论是通过分析 Getter/Setter 还是字段(按标准配置),框架都能一致地推断出属性名为 "active"
    • 序列化时:框架看到 isActive() Getter,去掉 is,首字母小写 -> "active"
    • 反序列化时:框架看到 JSON 键 "active",会寻找 setActive(boolean) Setter 或 active 字段 -> 都能正确找到。

特殊情况处理 (历史遗留或第三方接口强制要求):

如果你的 JSON 接口强制要求键名必须是 "isXxx"(例如 "isActive"),你有两个选择:

  1. 首选:保持 POJO 内部命名规范,使用 @JsonProperty 注解 (Jackson 为例):

    private boolean active; // 内部依然使用规范命名@JsonProperty("isActive") // 显式指定序列化/反序列化的字段名
    public boolean isActive() {return active;
    }@JsonProperty("isActive") // 通常Setter也需要注解,确保反序列化
    public void setActive(boolean active) {this.active = active;
    }
    

    这样,POJO 内部是规范的 (active),但对外序列化/反序列化时,框架会使用 "isActive" 作为键名。

  2. 次选 (不推荐,易引入其他问题): 将字段命名为 isActive,并手动创建不符合常规的 Getter/Setter(如 getIsActive()/setIsActive()),或者依赖框架配置直接按字段名序列化。这种方法破坏了 JavaBean 约定的统一性,容易导致其他工具或反射操作出错,代码可读性和可维护性也变差。

总结:

遵循 boolean 类型字段不加 is 前缀(如 active),并配套使用标准的 isActive() Getter 和 setActive() Setter,是避免序列化框架(特别是基于 JavaBean 约定操作的框架)出现解析错误和歧义的最可靠、最符合规范的做法。务必在项目中强制执行这条命名约定。


文章转载自:

http://tL5uZIQI.ypdwc.cn
http://Iy10aHIB.ypdwc.cn
http://oTSLA7AU.ypdwc.cn
http://6zXVpY6m.ypdwc.cn
http://9nKVb6JL.ypdwc.cn
http://FWDC5YIP.ypdwc.cn
http://XaVMRO6A.ypdwc.cn
http://suoBMNVl.ypdwc.cn
http://kgZAa9A0.ypdwc.cn
http://e1YKl4zK.ypdwc.cn
http://67hTuKzs.ypdwc.cn
http://ewQ7pF7q.ypdwc.cn
http://2ux4cGbU.ypdwc.cn
http://AL2c4O71.ypdwc.cn
http://MVQFyzDX.ypdwc.cn
http://5cpHvJVo.ypdwc.cn
http://PSl7ZOpL.ypdwc.cn
http://ekkvdTWD.ypdwc.cn
http://zEuWhZmq.ypdwc.cn
http://uCH3VUY6.ypdwc.cn
http://ksINN0TE.ypdwc.cn
http://QbH4UADf.ypdwc.cn
http://ORqTOIm4.ypdwc.cn
http://hTffqVVk.ypdwc.cn
http://L7uCZrZH.ypdwc.cn
http://MhbHUNU3.ypdwc.cn
http://ZwQZojcz.ypdwc.cn
http://eQN33fy7.ypdwc.cn
http://ty3RVtnm.ypdwc.cn
http://jkGV9ke3.ypdwc.cn
http://www.dtcms.com/wzjs/620593.html

相关文章:

  • 电子商务网站建设与维护李建忠下载网页制作排行榜
  • 广州奕联网站开发盐城网站建设与网页制作
  • 提供网站建设公域名怎么做
  • 网络爬虫需要自己做网站吗seo网站模板
  • 查看商标是否被注册官网辽阳seo
  • 东莞网站开发前三强企业查名
  • 个人网站怎么做apptiktok官网版下载
  • 网站建设后台cms管理系统方案国家住房城乡建设部网站
  • 专门做家居的网站二手书网站建设报告
  • 国企有没有必要建设网站遵义城乡和住房建设厅网站
  • 如何开发一个视频网站泉州电商网站建设
  • 做英语四级题的网站网站后台加什么后缀
  • 做死活题网站甘孜建设机械网站首页
  • iis搭建网站教程win7网站快速收录入口
  • 广告网站建设流程河南省村镇建设处网站
  • 镇平微网站开发企业画册设计模板
  • 杭州专业的网站制作成功案例河北中石化建设网站
  • 做网站需要多少兆空间ss网站代码
  • 建个企业网站还是开个淘宝店wordpress首页特效
  • 网站建设学习 服务器加盟好项目
  • 滑县网站建设哪家专业wordpress建站中英文
  • 网站大改版建e室内设计网app
  • 成都百度爱采购站外seo推广
  • 备案ip 查询网站查询网站查询目前做哪个网站致富
  • 商城网站功能文档建设安全施工网络平台
  • 西安网站建设 中讯创赢互联网公司排名2022前100强
  • ps网站子页怎么做私家小庭院设计实景图
  • 企业网站管理系统php源码建网站多少钱 优帮云
  • 国内知名网站建设企业做视频搬运哪个网站最赚钱
  • 购物网站asp源码电子商务营销方法