一个关于Java变量命名和代码生成的差异
1 情景描述:
?
- 服务端使用 thrift,自动生成java代码!
- WEB程序使用spring,ibatis等,在JSP页面用JSTL标签等。
?
2 问题发生:
?
有一天在页面用 ${payment.tBegin} 访问时间字段,死活都是异常,说是找不到 payment对象的tBegin属性!
?
经过仔细检查,没有发现异常;变量名完全正确,get set方法正确; 在controller里也可以访问到tBegin属性!
?
3 找了别人一起看,没看出来!
?
一日,再次自个琢磨,发现一个差异:payment的所有属性字段中,tBegin有一点不同 - 它的第二个字母是大写! --- 不要小瞧这个差异,后来问题就是从这里得到解决的。。。
?
?
4 终于有一天,我们开始怀疑是因为tBegin的第二个大写才引起的问题! 马上写了一个class去测试,发现:
?
- eclipse的代码生成,以及 jstl都主张: 如果一个属性名的第二个字母是大写,那么get set方法生成时,继续保留首字母小写,即 gettBegin(), settBegin()?
?
- thrift 在 thrift java *.thrift 时,对于类似tBegin这样的,直接生成为 getTBegin(),setTBegin() !
?
?
!!!汗,瀑布汗!!!