欢迎使用CSDN-markdown编辑器
来源:互联网 发布:中国移动杭州数据 编辑:程序博客网 时间:2024/05/17 03:16
Experience Java的属性变量名前两个字母大小写问题
Java属性命名规范!
一般情况下。Java的属性变量名都已小写字母开头,如:userName,showMessage等,但也存在着特殊情况,考虑到一些特定的有意思的英文缩略词如(USA,XML等),JavaBean也允许大写字母起头的属性变量名,不过必须满足“变量的前两个字母要么全部大写,要么全部小写”的要求,如:IDCode、ICCard、idCode等属性变量名是合法的,而iC、iCcard、iDCode等属性变量名是非法的。正是由于这个原因造成了下面这种情况:
举个例子:
JavaBean
public class RegionDTO implements Serializable{ public String cId; public String getCid() { return cid; } public void setCid(String cid) { this.cid = cid; } public String cName; public String getCName() { return cName; } public void setCName(String name) { cName = name; }}
封装成List后,然后在页面上用C标签进行显示
${item.cId}//报错 RegionDTO没有这个属性!!!
转自:http://chanson.iteye.com/blog/419028
1、背景
本文讲的普通JavaBean只是一个拥有Property(域/类变量)及其setter/getter的普通Java类。
有一定Java开发经验的人可能会知道,普通JavaBean的Property(域/类变量)的命名不能采用以下形式:aA***或者Aa***,如:”aDdress”或”Address”,否则,在web应用中会报无法找到这个Property(因为根据”规则”,需要找的是”ADdress”或”address”)。但对于其中的原因,一般人都不明白,难道这是Sun公司当初定的规范吗?
Java开源以后,我们终于可以解开其中的谜:
2、普通JavaBean处理涉及到相关类
在web应用中,Servlet容器或者EJB容器一般会使用java.beans包中的类来加载这些JavaBean。
BeanInfo(接口)
|
SimpleInfo(类)
|
GenericBeanInfo(类)
GenericBeanInfo是JavaBean数据装载类。
Introspector是JavaBean处理中最重要的一个处理类。
另外的一些辅助类,就不一一列举了。
3、解密
3.1 开始
在应用中,我们通常会用以下代码来获取一个普通JavaBean相关的信息:
BeanInfo mBeanInfo = null; try { mBeanInfo = Introspector.getBeanInfo(Person.class); } catch (IntrospectionException e) { e.printStackTrace(); }
3.2 深入
在Introspector类的getBeanInfo方法中,我们发现其中与Property处理相关的行:
private GenericBeanInfo getBeanInfo() throws IntrospectionException { …… PropertyDescriptor apropertydescriptor[] = getTargetPropertyInfo(); …… }
3.3 继续深入
在Property处理方法中,我们发现其处理方式是根据getter/setter的方法来得到Property(域/类变量)
private PropertyDescriptor[] getTargetPropertyInfo() throws IntrospectionException{ …… if(s.startsWith("get")) obj = new PropertyDescriptor(decapitalize(s.substring(3)), method, null); …… }
3.4 关键
接下来,最关键的就是下面这个方法:
public static String decapitalize(String s) { if(s == null || s.length() == 0) //空处理 return s; if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){ //长度大于1,并且前两个字符大写时,返回原字符串 return s; } else{ //其他情况下,把原字符串的首个字符小写处理后返回 char ac[] = s.toCharArray(); ac[0] = Character.toLowerCase(ac[0]); return new String(ac); } }
4 Ending
解密完成。
明白真相,才会解开心中的锁——其实很简单。
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Boost算法库——搜索算法(Boyer-Moore Search)
- 获取SSM项目中所有的URL
- Qt-界面动态图的实现
- python各个操作excel模块的对比
- 从底层驱动 到上层APP的流程(3)
- 欢迎使用CSDN-markdown编辑器
- Spring
- 逻辑回归(Logistic Regression)
- 类和对象
- protobuf 如何解析(大于64MB)超大报文
- Leetcode House Robber
- 矩阵运算
- bean的生命周期第5,8步--动态代理
- cad看图软件看图软件哪个好?