`
pouyang
  • 浏览: 320117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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
解密完成。
明白真相,才会解开心中的锁——其实很简单。
分享到:
评论

相关推荐

    JAVA-experience.rar_experience

    "JAVA-experience.rar_experience"这个压缩包文件,正如其名,是一位有经验的学长为正在学习Java的大学生们精心准备的学习心得分享。下面,我们将深入探讨这份资源可能包含的重要知识点,以及如何有效地利用这些经验...

    Java-learning-experience.zip_experience

    这个名为“Java-learning-experience.zip_experience”的压缩包文件,包含了一份文档“Java learning experience.doc”,它很可能记录了一位研究生在Java编程学习中的心路历程和宝贵经验。这篇文档可能会涵盖多个...

    IBM redbook Experience Java EE! Using WebSphere Application Server Community Edition

    《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

    "this is a repository for recording my java learning experience"这个标题暗示了一个个人的学习资源库,其中可能包含了作者在学习Java过程中积累的各种笔记、代码示例、项目和心得。这通常是一个非常有价值的资源...

    Java Interview Questions for 5 years Experience.pdf

    在Java中,Volatile和Transient是两个关键字,用于修饰变量。Volatile变量保证了多线程环境下的可见性和有序性,确保变量的最新值被所有线程所见。Transient变量则标记了对象的某个字段不需要被序列化。 2. Vector...

    java类与对象实验报告.docx

    在给定的实验中,有两个主要的类被创建:`complex1` 和 `Complex`,它们都用来表示复数,并提供了复数的加法和减法运算。 1. **复数类(complex1)**: - 这个类采用了面向过程的编程方式,其中数据成员(即类的...

    personal-experience-about-java.rar_personal

    "personal-experience-about-java.rar_personal"这个压缩包文件,显然包含了作者十年来在Java领域的个人经验与感悟,对于想要深入了解Java或者正在Java道路上探索的人来说,无疑是一份宝贵的资源。 首先,我们可以...

    Java-development-experience.zip_experience_立项

    本资料集合主要围绕立项、设计、编码和测试四个关键阶段进行深入的总结与分析,旨在为Java开发者提供宝贵的实战指导。 首先,我们来探讨【立项】阶段。立项是项目启动的第一步,它涉及到对项目需求的明确、资源评估...

    java必备知识点大全.pdf

    Java必备知识点大全的内容非常丰富,涵盖了Java语言的基础知识、常用的框架以及数据库的应用等方面,是每一个Java开发者学习和面试时的重要参考。下面是对文档中各个知识点的详细解析。 基础篇: JDK常用的包:Java...

    Learn JavaFX 8 - Building User Experience and Interfaces with Java 8

    javafx 比较好的学习资料 Learn JavaFX 8 - Building User Experience and Interfaces with Java 8 - 1st Edition (2015)

    JAVA作业二生产者消费者问题.docx

    生产者消费者问题是多线程编程中的经典问题,它模拟了两个不同类型的线程(生产者和消费者)在共享资源时的交互。在这个Java程序中,生产者和消费者都是通过独立的线程运行,实现了协作式的数据生产和消费。下面将...

    Java Programming Interview Questions.pdf

    6. **切换字符串字符大小写**:遍历字符串,将小写字母转换为大写,大写字母转换为小写。 ```java public String toggleCase(String str) { char[] chars = str.toCharArray(); for (int i = 0; i ; i++) { if ...

    experience

    标题“experience”可能指的是某个项目经验或开发经验的分享,结合描述中提供的博文链接,我们可以推测这可能是一篇关于IT领域某项技术或工具实际应用的文章。由于标签中提到了“源码”和“工具”,我们可以预期这篇...

    Experience-Java-8:该存储库包含Experience Java 8课程的练习

    Java 8是Java编程语言的一个重要版本,引入了许多新特性,极大地提升了开发效率和代码的可读性。在这个"Experience Java 8"课程的练习中,你可以深入学习和掌握这些新特性,从而提升你的Java编程技能。以下是这个...

    eXperience_Release.zip

    "eXperience_Release"这个主题,正如其名,旨在带给用户一种全新的、独特的操作体验。它将深度定制的元素融合在一起,创造出与众不同的视觉风格,让用户在使用电脑时感受到前所未有的沉浸感。 打开压缩包,我们发现...

    Java Performance and Scalability

    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 ...

    PRIORITIZED EXPERIENCE REPLAY.pdf

    第一部分是引言,介绍了在线强化学习的基本概念,以及传统方法中存在的两个问题:更新参数时强相关性的问题和快速遗忘重要经验的问题。引言部分还指出,经验回放是一种解决上述问题的技术,它通过保存经验到记忆库中...

Global site tag (gtag.js) - Google Analytics