java is setter_java中坑爹的getter、setter方法的潜规则

众所周知的java中都会给类的属性写getter和setter方法,以getter方法为例,通常是get+属性的大写首字母+属性剩下的字符组成。比如:有个属性名为name,那么其getter方法名就是getName,如果name是boolean类型,那么getter方法就是isName,当然现在的getter和setter方法都不会自己手写了,一般是通过eclipse或者Intellij idea生成。

javaBean规范

javabean规范文档:http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/,里面的有以下两个章节降到了具体的命名规则:

8.3.1 Simple properties

8.3.2 Boolean properties

8.8 Capitalization of inferred names.

这个文档里面说明了,从getter和setter方法名如何推倒出propertyName:

一般情况,把除去get或者is(如果是boolean类型)后的部分首字母转成小写即可,比如:getFoo –> foo

如果除去get和is后端的部分,首字母和第二个字母都是大写,不作转换即可,比如:getXPath –> XPath

意想不到的getter和setter生成规则

现在大家都使用ide来帮忙生成getter和setter,那么ide的规则就算是我们的标准了吧,是否把javabean标准反过来推理就行了呢?经测试实际上还有一些场景可能都想不到,比如:首字母不用大写;多个不同的属性(字母大小写不同)的getter方法是相同的。看下面的例子(用eclipse生成getter测试):

Java

// 你能猜对多少

private String getepath --> getGetepath()

private String getEpath --> getGetEpath()

private String epath --> getEpath()

private String ePath --> getePath() // 首字母不用大写

private String Epath --> getEpath() // 和epath的getter方法是一样的

private String EPath --> getEPath()

private boolean isenable --> isIsenable()

private boolean isEnable --> isEnable() // 不是把首字母大写并在前面加is,其结果和enable的getter方法相同

private boolean enable --> isEnable()

private boolean eNable --> iseNable() // 首字母不用大写

private boolean Enable --> isEnable() // 和enable的getter方法相同

private boolean ENable --> isENable() //

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// 你能猜对多少

privateStringgetepath-->getGetepath()

privateStringgetEpath-->getGetEpath()

privateStringepath-->getEpath()

privateStringePath-->getePath()// 首字母不用大写

privateStringEpath-->getEpath()// 和epath的getter方法是一样的

privateStringEPath-->getEPath()

privatebooleanisenable-->isIsenable()

privatebooleanisEnable-->isEnable()// 不是把首字母大写并在前面加is,其结果和enable的getter方法相同

privatebooleanenable-->isEnable()

privatebooleaneNable-->iseNable()// 首字母不用大写

privatebooleanEnable-->isEnable()// 和enable的getter方法相同

privatebooleanENable-->isENable()//

看到这里,你是否有种隐隐的蛋疼感~~

什么时候你需要关注getter和setter方法的生成规则?

想要序列化为json对象时,如果你使用gson的话,基本没啥问题,但要是你使用了低版本的fastjson,那么可能会中枪了

要自己写代码拼装出getter和setter方法名,以此来通过反射查找Method时

个人建议

属性的前两个都以小写开头

boolean类型不要用is开头

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值