精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-15
是一个基于jdk5 annotation的辅助api包,主要用于POJO的操作,将被设计成0依赖(不依赖其他的jar文件),最简化,速度优先的api包。 为什么编写crazyPOJO? 因为最近发现equals,clone,hashCode,toString这类的简单方法充满了太多的重复代码。 使用xstream导出pojo为xml时,不能定制导出字段。 还会加入其他的新功能。如pojo2xml,pojo2json,json2pojo,xml2pojo 一切与pojo有关的方法都可能被加入。 如何使用crazyPOJO? 在关键的字段的getter方法上加上@ValueField,在colone,equals,hashCode,toString中调用ObjectMethods.beanXXXX方法即可。 java 代码
已知bug 下面的POJO会发生死循环。 java 代码
对上面的代码,解决办法,是只在getA()上加@ValueField,或者只在getB()上加@ValueField,即便是在自己写的equals方法中,没有注意这种嵌套关系,也会发生死循环。 兄弟们,如果发现新bug,或者有什么好提议,请一定要留言。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-03-16
没看出来有什么比较爽的地方啊?
|
|
返回顶楼 | |
发表时间:2007-03-16
目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
|
|
返回顶楼 | |
发表时间:2007-03-16
jasongreen 写道 目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
没有下载,不过粗看了一下. 那一个"@ValueField"作用是什么? 假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例: public int hashCode() { return this.name.hashCode()+this.bool.hashCode();; } public String toString() { return new ToStringBuilder(this).append("name", this.name).append("bool",this.bool).toString(); } 暂时做猜测 |
|
返回顶楼 | |
发表时间:2007-03-16
lighter 写道 jasongreen 写道 目前比较简单,是辅助编写,clone(), hashCode() ,equals(obj), toString(),我想还是比自己写要方便许多的。
没有下载,不过粗看了一下. 那一个"@ValueField"作用是什么? 假如这一个name和bool属性加这一个标签的情况下,基代码是不是相当于,举例: public int hashCode() { return this.name.hashCode()+this.bool.hashCode();; } public String toString() { return new ToStringBuilder(this).append("name", this.name).append("bool",this.bool).toString(); } 暂时做猜测 类似你所说的,但生成hashCode的机制不是简单的加法 @ValueField作为equal,hashCode,toString,clone所关注的字段。 |
|
返回顶楼 | |
发表时间:2007-03-17
我想你这return ObjectMethods.beanEquals(this, obj); 等等 ObjectMethods.beanXXX只能做基本需求时使用。
你是无法知道具体业务什么时候需要哪些字段作判断。或许,toString时需要这个属性,但equals不需要。或许hashCode更不一样。 用Commons lang 就够了。 |
|
返回顶楼 | |
发表时间:2007-03-17
哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
|
|
返回顶楼 | |
发表时间:2007-03-17
lococode 写道 哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
你说的很有道理,但还没有想到需要传什么参数给ValueField |
|
返回顶楼 | |
发表时间:2007-03-20
jasongreen 写道 lococode 写道 哈哈,也许你应该传递些信息给ValueField ,或许就更完善点了。
你说的很有道理,但还没有想到需要传什么参数给ValueField @Validate("min=1900,max=2007") |
|
返回顶楼 | |
发表时间:2007-03-20
想法很cool。没准儿我们可以用。
几点建议: 1。annotation最好可以直接用在field上,private field也可以。 2。如果整个类被annotate了(所以这个ValueField最好改名成Value),那么所有非transient的field都当成@Value。 3。最好提供一个ValueObject的基类来自动实现equals/hashCode/toString。这样如果我继承ValueObject就不用写这三个讨厌的东西了。 4。clone需要么?我不是可以直接implements Cloneable?为什么需要ObjectMethods.beanClone()? 5。@Value("str")可以用来指定某个field或者整个对象在toString里面的名字。 |
|
返回顶楼 | |