论坛首页 入门技术论坛

讨论一下 commons-beanutils 里面的一个BUG:

浏览 4799 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-11-02  
对于这样的一个 pojo 类:
java 代码
 
  1. public class MyChild {  
  2.   
  3.     private String name;  
  4.   
  5.     private int age;  
  6.   
  7.     private String eMail;  
  8.   
  9.     // getters and setters...
  10. }  

你会发现用 BeanUtils 无法读取或保存其“eMail”属性,但是将属性名改成“myMail”之后就可以了。似乎只要第一个字母小写、第二个字母大写的情况就会出现这种 BUG。
   发表时间:2007-11-02  
struts时就常遇到,原来根子上是bean util的问题。。。
0 请登录后投票
   发表时间:2007-11-05  
看了一下 beanutils 的代码,然后发现无语了:根子还不在 beanutils,却是在 java.beans.Introspector 这个类。代码如下:
    public static void main(String[] args) throws Exception {
        BeanInfo beanInfo = Introspector.getBeanInfo(Address.class);
        PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
        for (int i = 0; i < properties.length; i++) {
            PropertyDescriptor property = properties[i];
            System.out.println(property.getName());
        }
    }



输出来却是:
EMail
class
homeNumber
mobileNumber
officeNumber
personName



“eMail”被他变成了“EMail”了。
0 请登录后投票
   发表时间:2007-11-05  
说实在的,这不应该是bug,因为javabean的规范就是这么规定的,所以JDK也是这样实现的。但是写javabean的人其实并没有了解javabean的规范所以才产生这样的疑问。这跟不按照Java语法写Java程序那当然是编译不过去是一样的。
可能我现在问大家什么是javabean,也没有几个人能回答的出来。不过这也没什么,对实际开发的意义也不大。只是我疑问的是为什么这样的帖子居然还会有15个好评。
0 请登录后投票
   发表时间:2007-11-05  
max.h.chen 写道
说实在的,这不应该是bug,因为javabean的规范就是这么规定的,所以JDK也是这样实现的。但是写javabean的人其实并没有了解javabean的规范所以才产生这样的疑问。这跟不按照Java语法写Java程序那当然是编译不过去是一样的。
可能我现在问大家什么是javabean,也没有几个人能回答的出来。我疑问的是为什么这样的帖子居然还会有15个好评。

在入门区么,很长见识啊。
而且对于javabean的规范这东西就如同魔鬼的契约,
很少有人会去仔细看的。
由于中英文的命名差异所以很多人会莫名奇妙的中招
还不知道到哪里去找问题的根源。
PS:我一个人权重就是15的说
0 请登录后投票
   发表时间:2007-11-07  
到网上确认了一下是否有“javabean的规范就是这么规定的”的说法,结果发现找到的关于 javabean 属性命名的指导文章都没有提到这种情况,只在SDN的论坛上找到一篇没有什么价值帖子:

http://forum.java.sun.com/thread.jspa?threadID=5165269&messageID=9631752
0 请登录后投票
   发表时间:2007-11-08  
http://java.sun.com/products/javabeans/docs/spec.html

从上面的网站将javabean spec下载下来后,跳到8.8 Capitalization of inferred names章节,你自己看就是了。
12 请登录后投票
   发表时间:2007-11-08  
受教了
我明明可以看到那个对号了,怎么还不可以投票呢
0 请登录后投票
   发表时间:2007-11-08  
你没星,也没有钻。。。。
0 请登录后投票
   发表时间:2007-11-09  
看来只是把初级会员不能评分的字样去掉而已
2 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics