电脑看图软件推荐上有哪些PPT好软件?求推荐

BeanUtils.copyProperties使用笔记 - 代码说-Let code talk - ITeye技术网站
博客分类:
BeanUtils.copyProperties VS PropertyUtils.copyProperties
两者最大的区别是:
BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。
既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProperties。
因此,PropertyUtils.copyProperties应用的范围稍为窄一点,它只对名字和类型都一样的属性进行copy,如果名字一样但类型不一样,它会报错。
关于两者区别,这篇文章总结了很多。
下面主要谈谈BeanUtils。
使用BeanUtils有几个要注意的地方:
1.对于类型为Boolean/Short/Integer/Float/Double的属性,它会转换为0:
public class User {
private Integer intV
private Double doubleV
private Short shortV
private Long longV
private Float floatV
private Byte byteV
private Boolean booleanV
User src = new User();
User dest = new User();
BeanUtils.copyProperties(dest, src);
System.out.println(src);
System.out.println(dest);
User [intVal=null, doubleVal=null, shortVal=null, longVal=null, floatVal=null, byteVal=null, booleanVal=null]
User [intVal=0, doubleVal=0.0, shortVal=0, longVal=0, floatVal=0.0, byteVal=0, booleanVal=false]
在stackoverflow上有人解释说是因为这几个类型都有对应的基本类型,在进行类型转换时,有可能遇到类似Integer -& int的转换,此时显然不能对int类型的属性赋值为null,因此统一转换为0。
如何让它不要转为0呢?可以这样:
import mons.beanutils.converters.IntegerC
IntegerConverter converter = new IntegerConverter(null);
//默认为null,而不是0
BeanUtilsBean beanUtilsBean = new BeanUtilsBean();
beanUtilsBean.getConvertUtils().register(converter, Integer.class);
2.对于java.util.Date/BigDecimal/java.sql.Date/java.sql.Timestamp/java.sql.Time这几个类,如果值为null,则在copy时会抛异常,需要使用对应的Conveter:
public class User2 {
private java.util.Date javaUtilDateV
private java.sql.Date javaSqlDateV
private java.sql.Timestamp javaSqlTimeStampV
private BigDecimal bigDecimalV
private java.sql.Time javaSqlT
User2 src = new User2();
User2 dest = new User2();
BeanUtilsBean beanUtilsBean = new BeanUtilsBean();
//如果没有下面几行,则在转换null时会抛异常,例如:mons.beanutils.ConversionException: No value specified for 'BigDecimal'
//在mons.beanutils.converters这个包下面有很多的Converter,可以按需要使用
beanUtilsBean.getConvertUtils().register(new mons.beanutils.converters.BigDecimalConverter(null), BigDecimal.class);
beanUtilsBean.getConvertUtils().register(new mons.beanutils.converters.DateConverter(null), java.util.Date.class);
beanUtilsBean.getConvertUtils().register(new mons.beanutils.converters.SqlTimestampConverter(null), java.sql.Timestamp.class);
beanUtilsBean.getConvertUtils().register(new mons.beanutils.converters.SqlDateConverter(null), java.sql.Date.class);
beanUtilsBean.getConvertUtils().register(new mons.beanutils.converters.SqlTimeConverter(null), java.sql.Time.class);
beanUtilsBean.copyProperties(dest, src);
System.out.println(src);
System.out.println(dest);
使用BeanUtils还会经常碰到这样变态的需求:
假设是从A复制到B:
需求1:如果B中某字段有值(不为null),则该字段不复制;也就是B中该字段没值时,才进行复制,适合于对B进行补充值的情况。
需求2:如果A中某字段没值(为null),则该字段不复制,也就是不要把null复制到B当中。
对于需求1,可以这样:
import mons.beanutils.BeanUtilsB
import mons.beanutils.PropertyU
public class CopyWhenNullBeanUtilsBean extends BeanUtilsBean{
public void copyProperty(Object bean, String name, Object value)
throws IllegalAccessException, InvocationTargetException {
Object destValue = PropertyUtils.getSimpleProperty(bean, name);
if (destValue == null) {
super.copyProperty(bean, name, value);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
对于需求2,可以这样:
import mons.beanutils.BeanUtilsB
public class CopyFromNotNullBeanUtilsBean extends BeanUtilsBean {
public void copyProperty(Object bean, String name, Object value) throws IllegalAccessException, InvocationTargetException {
if (value == null) {
super.copyProperty(bean, name, value);
bylijinnan
浏览: 361217 次
来自: 深圳
写得有趣 ^_^
第二个方法很好
&script&alert(&close ...
39行有个bug:&int j=new Random ...
南总,求解释~~
import java.beans.Prop ...6476人阅读
Java以及JSP技术(30)
StrutsBeanUtils.copyPropertiesbaBeanUtils.copyProperties(a,b)bbaBeanUtils^_^
PeoplePerson
People.java
package com.mangocity.
&* @author CMTobby
public class People {
&&& public People() {
&&&&&& // TODO Auto-generated constructor stub
&&& private String name;//姓名
&&& private int age;//年龄
&&& private String email;
&&& public String getEmail() {
&&&&&& return email;
&&& public void setEmail(String email) {
&&&&&& this.email =
&&& public int getAge() {
&&&&&& return age;
&&& public void setAge(int age) {
&&&&&& this.age =
&&& public String getName() {
&&&&&& return name;
&&& public void setName(String name) {
&&&&&& this.name =
Person.java
package com.mangocity.
&* @author CMTobby
public class Person {
&&& private String name;
&&& private int age;
&&& private String address;
&&& public String getAddress() {
&&&&&& return address;
&&& public void setAddress(String address) {
&&&&&& this.address =
&&& public int getAge() {
&&&&&& return age;
&&& public void setAge(int age) {
&&&&&& this.age =
&&& public String getName() {
&&&&&& return name;
&&& public void setName(String name) {
&&&&&& this.name =
接着构建我们的测试类
import mons.beanutils.*;
public class TestBeanUtils {
&&& &* @param args
&&& public static void main(String[] args) {
&&&&&& // TODO Auto-generated method stub
&&&&&& People tobby=new People();
&&&&&& Person cindy=new Person();
&&&&&& tobby.setAge(23);
&&&&&& tobby.setName(&CMTobby&);
&&&&&& tobby.setEmail(&&);
&&&&&& cindy.setName(&Cindyelf&);
&&&&&& cindy.setAge(24);
&&&&&&& try {
&&&&&&& &&&& BeanUtils.copyProperties(cindy, tobby);
&&&&&&&&&& System.out.println(cindy.getName()+&:&+cindy.getAge());
&&&&&& } catch (IllegalAccessException e) {
&&&&&&&&&& // TODO Auto-generated catch block
&&&&&&&&&& e.printStackTrace();
&&&&&& } catch (InvocationTargetException e) {
&&&&&&&&&& // TODO Auto-generated catch block
&&&&&&&&&& e.printStackTrace();
运行该程序输出是:CMTobby:23。这说明经过BeanUtils.copyProperties之后cindy中name和age属性的值已经被tobby中的同名属性给&覆盖&了,至于tobby中有而cindy中没有的email属性有没有复制到cindy中就不得而知了,据我的猜测应该是没有的,因为在cindy中没有地方放这个属性啊,而且就算复制过去了,我们如何得到这个值呢?难道用cindy.getEmail()吗,可是cindy根本没有这个方法啊?当然这只是我的猜测,不知哪位达人有准确的答案,欢迎指正,^_^。
那么这个复制过程是如何的呢?是直接属性对属性的值拷贝吗,例如cindy.name=tobby.name?还是老办法,将测试进行到底。
1.我将Person中的name属性改名为name11,age属性改为age11,get和set方法都做相应的修改,此时运行程序,输出结果为:CMTobby:23,和前面的一样,由此可以排除值拷贝这个假设了,因为此时cindy中没有了name属性而是name11属性。
2.我将Person中的setName和setAge方法分别改为setName11和setAge11.OK,再次运行我们的程序,这时的输出是:Cindyelf:24,我们发现cindy的name属性和age属性的值都没有被覆盖掉,也就是说tobby中的值都没有拷贝过来,为什么呢?
3.将我们程序恢复到刚开始的样子,即上面所贴的代码那样,然后将Person中的setAge方法注释掉,并注释掉TestBeanUtils中的cindy.setAge(24)这行代码。运行程序,输出结果是:CMTobby:0。tobby中age属性的值没有拷贝过来,为什么呢?
基于上述两个测试,我猜测BeanUtils.copyProperties的行为过程是这样的:首先通过java的反射得到tobby中的所有域,然后根据域的名字调用cindy中相应的set方法。举个例子,BeanUtils发现tobby中有个name属性,那么它会尝试执行cindy.setName()这个方法。这就很容易解释测试2和测试3的结果了:因为cindy中没有了setName或者setAge(被改成了setName11和setAge11或者被注释掉了),所有cindy的name属性不会变,仍然是以前的值。而在测试1中,因为cindy对象有setName方法,所以name11属性的值会被覆盖掉。
做完上述测试之后,我闲着无聊又做了如下两个测试:
4.将Person中的setName和setAge改为setname和setage,程序输出结果是:CMTobby:23,cindy中的name属性和age属性的值都发生了变化;
5.将Person中的setName和setAge改为setNAme和setAGe,程序输出结果是:Cindyelf:24,tobby中的属性的值都没有拷贝过来。
基于这两个测试,我想过程会不会是这样的:如果BeanUtils发现tobby中有个name属性,那么它就会尝试执行cindy.setName()或者cindy.setname()。当然这些都只是我的推论,仅供参考,所有的答案都会在BeanUtils的源码中找到,^_^,还望哪位达人不吝告知。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:342270次
积分:4941
积分:4941
排名:第4555名
原创:117篇
评论:157条
(1)(3)(1)(1)(4)(3)(7)(3)(21)(17)(6)(2)(1)(3)(4)(3)(3)(3)(6)(7)(10)(10)(4)(2)(1)(4)(1)2271人阅读
JSP/Java(60)
这两天做的项目中,由于pojo的属性太过庞大,于是想到了使用Apache的BeanUtils方法copyProperties来帮忙复制属性值,于是先写了一个测试类
结果无论如何,复制出来的结果都是null,苦思冥想也未得果,网上到处查资料,明明复制的方法是一样的,可就是结果不如意,一直都是null。。。
最后仔细想了下,问题可能出在bean上,自己做的demo和网上的demo唯一的区别就是他们的都是public类,我的是default类。。。。。
于是把测试类中的两个bean代码复制出来,另外写了两个public的类。。。终于。。。出来了。此刻才知道原来apache的属性复制方法竟然只对public的类才起作用。。。。不过其实这并没有大碍,本来所有的form和pojo我们就都是public声明的。。。呵呵
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:365609次
积分:4281
积分:4281
排名:第5741名
原创:54篇
转载:126篇
评论:64条
(2)(6)(1)(2)(4)(19)(7)(8)(13)(9)(8)(6)(8)(5)(14)(1)(1)(2)(8)(9)(11)(36)beanutils.copyProperties是不是没有源对象和目标对象这么一说啊_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:574,875贴子:
beanutils.copyProperties是不是没有源对象和目标对象这么一说啊收藏
只要两个对象 其中的某一个属性为空 另一个对应属性不为空 就将不为空的拷贝给空的?是不是这样?那如果两个属性值不一样怎么办?原以为是后面的对象拷贝给前面的,但debug的时候看到,一开始后面的对象属性若为null值,竟然被前面的对象的对应属性给拷贝了。擦擦
java培训---美国上市公司出品,入学签订就业协议,名企疯抢达内学员.java,O基础小班授课,java专家领衔授课,免费试听,满意后付款!
错了!不是不为空 而是不为null!!!
有人会bean吗 来说说呗。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 电脑看图软件推荐 的文章

 

随机推荐