他说了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
要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。
#3
我也在用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)的区别。
JavaBean 中的属性是通过 get/set 方法名得来的,因此
getSname 对应的属性名是 sname
getSName 对应的属性名是 SName
如果写成 sName 或者 Sname 的话就是不合法的属性名。
在 Java 中要区分一下属性(property)与字段(field)或成员变量(member variable)的区别。
#1
java代码有一些基本的规范,属性一般是首字母小写,当然要是大写也不能说错,至少如果按规范来的话,别人比较容易读。
#2
要按规范来的,否则像struts这样的框架,他是按照规范来反射调用javabean的set和get方法,调用结果会产生异常,这我是有过教训的。
#3
我也在用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)的区别。
JavaBean 中的属性是通过 get/set 方法名得来的,因此
getSname 对应的属性名是 sname
getSName 对应的属性名是 SName
如果写成 sName 或者 Sname 的话就是不合法的属性名。
在 Java 中要区分一下属性(property)与字段(field)或成员变量(member variable)的区别。