看到一篇贴关于javaBean属性名前两个字母的大小写问题,有些无法理解

时间:2021-05-10 19:04:17
原帖:http://pouyang.iteye.com/blog/634844
他说了JavaBean的属性名前两个字母要不都大写,要不都小写,然后用Java源码进行揭秘。

问题是看到最后一段代码:
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); 
        } 
    } 

这里面他如果前两个字母都是大写的,那么就返回原字符串,其他情况都是把首字符小写后返回,那么这种处理对AA,Aa,aa这些情况是适用的,分别返回了AA,aa,aa,如果是aA呢?返回的不还是aA吗,那这样的话属性名称不还是非法的吗,还是说这个时候会抛异常?



还有难道说Java除了接受前两个字母都大写和都小写之外,还能接受首字母大写,第二个字母小写的情况?像上面的Aa一样。

5 个解决方案

#1


java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

#2


引用 1 楼 tanrenzong1986 的回复:
java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。

#3


引用 2 楼 new_bird_0001 的回复:
引用 1 楼 tanrenzong1986 的回复:

java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。


我也在用struts框架时碰到过这种问题,如果前两个字母出现像Aa,aA这种情况,就会出现找不到属性的异常,但是一般java对属性的命名规范只是首字母要小写,然后驼峰标示,好像没有那么严格的要求前两个字母要么都大写,要么都小写。

#4



class Person{//这是一个JavaBean
    private String AA;
    private String Bb;
    private String cC;
    public String getAA() {
        return AA;
    }
    public void setAA(String aa) {
        AA = aa;
    }
    public String getBb() {//decapitalize(Bb)会得出属性是bb,实际是Bb
        return Bb;
    }
    public void setBb(String bb) {
        Bb = bb;
    }
    public String getCC() {//decapitalize(CC)会得出属性是CC,实际是cC
        return cC;
    }
    public void setCC(String cc) {
        cC = cc;
    }
}
public class JavaBeanTest {
    public static void main(String[] args)throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        for(int i=0;i<pds.length;i++){
            System.out.println(pds[i].getName());
        }
    }
}
//输出:
//AA
//CC
//bb
class

#5


JavaBeans 规范强行规定的!

JavaBean 中的属性是通过 get/set 方法名得来的,因此

getSname 对应的属性名是 sname
getSName 对应的属性名是 SName

如果写成 sName 或者 Sname 的话就是不合法的属性名。

在 Java 中要区分一下属性(property)与字段(field)或成员变量(member variable)的区别。

#1


java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

#2


引用 1 楼 tanrenzong1986 的回复:
java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。

#3


引用 2 楼 new_bird_0001 的回复:
引用 1 楼 tanrenzong1986 的回复:

java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。

要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。


我也在用struts框架时碰到过这种问题,如果前两个字母出现像Aa,aA这种情况,就会出现找不到属性的异常,但是一般java对属性的命名规范只是首字母要小写,然后驼峰标示,好像没有那么严格的要求前两个字母要么都大写,要么都小写。

#4



class Person{//这是一个JavaBean
    private String AA;
    private String Bb;
    private String cC;
    public String getAA() {
        return AA;
    }
    public void setAA(String aa) {
        AA = aa;
    }
    public String getBb() {//decapitalize(Bb)会得出属性是bb,实际是Bb
        return Bb;
    }
    public void setBb(String bb) {
        Bb = bb;
    }
    public String getCC() {//decapitalize(CC)会得出属性是CC,实际是cC
        return cC;
    }
    public void setCC(String cc) {
        cC = cc;
    }
}
public class JavaBeanTest {
    public static void main(String[] args)throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
        PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
        for(int i=0;i<pds.length;i++){
            System.out.println(pds[i].getName());
        }
    }
}
//输出:
//AA
//CC
//bb
class

#5


JavaBeans 规范强行规定的!

JavaBean 中的属性是通过 get/set 方法名得来的,因此

getSname 对应的属性名是 sname
getSName 对应的属性名是 SName

如果写成 sName 或者 Sname 的话就是不合法的属性名。

在 Java 中要区分一下属性(property)与字段(field)或成员变量(member variable)的区别。