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
解密完成。
明白真相,才会解开心中的锁——其实很简单。
分享到:
相关推荐
"JAVA-experience.rar_experience"这个压缩包文件,正如其名,是一位有经验的学长为正在学习Java的大学生们精心准备的学习心得分享。下面,我们将深入探讨这份资源可能包含的重要知识点,以及如何有效地利用这些经验...
这个名为“Java-learning-experience.zip_experience”的压缩包文件,包含了一份文档“Java learning experience.doc”,它很可能记录了一位研究生在Java编程学习中的心路历程和宝贵经验。这篇文档可能会涵盖多个...
《IBM Redbook:Experience Java EE! Using WebSphere Application Server Community Edition》是一本专注于Java企业版(Java EE)开发和WebSphere应用服务器社区版使用的专业指南。这本书深入浅出地介绍了如何利用...
"this is a repository for recording my java learning experience"这个标题暗示了一个个人的学习资源库,其中可能包含了作者在学习Java过程中积累的各种笔记、代码示例、项目和心得。这通常是一个非常有价值的资源...
在Java中,Volatile和Transient是两个关键字,用于修饰变量。Volatile变量保证了多线程环境下的可见性和有序性,确保变量的最新值被所有线程所见。Transient变量则标记了对象的某个字段不需要被序列化。 2. Vector...
在给定的实验中,有两个主要的类被创建:`complex1` 和 `Complex`,它们都用来表示复数,并提供了复数的加法和减法运算。 1. **复数类(complex1)**: - 这个类采用了面向过程的编程方式,其中数据成员(即类的...
"personal-experience-about-java.rar_personal"这个压缩包文件,显然包含了作者十年来在Java领域的个人经验与感悟,对于想要深入了解Java或者正在Java道路上探索的人来说,无疑是一份宝贵的资源。 首先,我们可以...
本资料集合主要围绕立项、设计、编码和测试四个关键阶段进行深入的总结与分析,旨在为Java开发者提供宝贵的实战指导。 首先,我们来探讨【立项】阶段。立项是项目启动的第一步,它涉及到对项目需求的明确、资源评估...
Java必备知识点大全的内容非常丰富,涵盖了Java语言的基础知识、常用的框架以及数据库的应用等方面,是每一个Java开发者学习和面试时的重要参考。下面是对文档中各个知识点的详细解析。 基础篇: JDK常用的包:Java...
javafx 比较好的学习资料 Learn JavaFX 8 - Building User Experience and Interfaces with Java 8 - 1st Edition (2015)
生产者消费者问题是多线程编程中的经典问题,它模拟了两个不同类型的线程(生产者和消费者)在共享资源时的交互。在这个Java程序中,生产者和消费者都是通过独立的线程运行,实现了协作式的数据生产和消费。下面将...
6. **切换字符串字符大小写**:遍历字符串,将小写字母转换为大写,大写字母转换为小写。 ```java public String toggleCase(String str) { char[] chars = str.toCharArray(); for (int i = 0; i ; i++) { if ...
Java 8是Java编程语言的一个重要版本,引入了许多新特性,极大地提升了开发效率和代码的可读性。在这个"Experience Java 8"课程的练习中,你可以深入学习和掌握这些新特性,从而提升你的Java编程技能。以下是这个...
这部分内容对于理解如何保护用户数据安全、防止未授权访问等安全问题具有很大的帮助。 至于`frame`文件夹,它很可能代表了一个完整的系统架构或框架的实例。例如,作者可能会展示一个基于Spring框架的Web应用的构建...
"eXperience_Release"这个主题,正如其名,旨在带给用户一种全新的、独特的操作体验。它将深度定制的元素融合在一起,创造出与众不同的视觉风格,让用户在使用电脑时感受到前所未有的沉浸感。 打开压缩包,我们发现...
This book was written with one goal in mind: to provide Java programmers with the expertise needed to build efficient, scalable Java code. The author shares his experience in server-side performance ...
第一部分是引言,介绍了在线强化学习的基本概念,以及传统方法中存在的两个问题:更新参数时强相关性的问题和快速遗忘重要经验的问题。引言部分还指出,经验回放是一种解决上述问题的技术,它通过保存经验到记忆库中...