`

java 赋值

阅读更多
Beanutils
关键字: beanutils
一、简介:

BeanUtils提供对 Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很 多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

二、用法:

BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:

public static void copyProperties(java.lang.Object dest,java.lang.Object orig)  throws java.lang.IllegalAccessException,         java.lang.reflect.InvocationTargetException


如 果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如 Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐 个赋值:

//得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象Teacher teacher=new Teacher();
//赋值teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());
//持久化Teacher对象到数据库
HibernateDAO=;HibernateDAO.save(teacher);
而使用BeanUtils后,代码就大大改观了,如下所示:
//得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象Teacher teacher=new Teacher();
//赋值BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;HibernateDAO.save(teacher);


如 果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如 Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的 copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());


怎 么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与 BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围 内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

* java.lang.BigDecimal  
* java.lang.BigInteger  
* boolean and java.lang.Boolean  
* byte and java.lang.Byte  
* char and java.lang.Character  
* java.lang.Class  
* double and java.lang.Double  
* float and java.lang.Float  
* int and java.lang.Integer  
* long and java.lang.Long  
* short and java.lang.Short  
* java.lang.String  
* java.sql.Date  
* java.sql.Time 
* java.sql.Timestamp


这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。

三、优缺点:

Apache Jakarta Commons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是BeanUtils。我 将说明如何使用BeanUtils将local实体bean转换为对应的value 对象:


BeanUtils.copyProperties(aValue, aLocal)


上 面的代码从aLocal对象复制属性到aValue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设 local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用 了!

现在,还有一个坏消息:使用BeanUtils的成本惊人地昂贵!我做了一个简单的测试,BeanUtils所花费的时间要超过取数 据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!

文章出处:http://www.diybl.com/course/3_program/java/javajs/2008313/104409.html
分享到:
评论

相关推荐

    9.java赋值运算符.zip

    9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip9.java赋值运算符.zip...

    30.java赋值运算符.zip

    30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值运算符.zip30.java赋值...

    java赋值运算符.txt

    java赋值运算符

    java 赋值运算符、拷贝初始化和this指针_.docx

    ### Java中的赋值运算符、拷贝初始化及this指针详解 #### 一、赋值运算符与拷贝初始化 1. **赋值与初始化的区别**: - **初始化**通常发生在对象创建时,比如使用构造函数设定初始状态。 - **赋值**则是在对象...

    Java-Assignment:浙大中的Java赋值

    让我们详细探讨一下Java赋值的相关知识点。 1. **变量与赋值操作**:在Java中,变量是存储数据的容器。声明变量时,需要指定变量的类型(如int, String等)和名称。赋值是将一个值赋予变量的操作,例如`int age = ...

    java-o-赋值和关系运算符2022优秀文档.pptx

    "Java赋值和关系运算符" Java中的赋值运算符和关系运算符是两种不同的操作符,用于不同的目的。 一、赋值运算符 赋值运算符是双目运算符,左面的操作元必须是变量,不能是常量或表达式。作用是将右边操作元的值...

    浅谈Java变量赋值运算符及相关实例 <font color=red>原创</font>

    在本文中,我们将详细介绍Java赋值运算符的使用方法和实例。 使用赋值运算符为变量赋值 ----------------------------- 使用赋值运算符为变量赋值是Java编程语言中最基本的操作。例如: ```java int a = 10; // ...

    java 子类对象赋值给父类对象的使用

    通过以上讨论,我们可以看到,Java中子类对象赋值给父类对象是一种强大且灵活的设计模式,它允许我们在代码中使用抽象的父类引用,从而简化编程,增加代码的通用性和可维护性。在实际项目中,合理利用这一特性,能够...

    java 给指定字符赋值

    综上所述,Java中的字符赋值涉及到变量声明、转义序列、Unicode编码、字符串与字符转换、字符操作以及I/O流等多个方面。在实际编程中,理解和熟练运用这些概念对于编写高效且可读性强的代码至关重要。

    java代码-使用java增强for循环 string数组赋值的源代码

    java代码-使用java增强for循环 string数组赋值的源代码 ——学习参考资料:仅用于个人学习使用!

    java反射给指定字段赋值

    ### Java反射机制详解:给指定字段赋值 在Java编程语言中,反射是一个非常强大的功能,它允许程序在运行时检查或“反映”自身,并直接操作内部属性(如类、方法和字段)。本文将深入探讨如何利用Java反射来访问并...

    赋值语句的翻译程序 编译原理 Java

    对于"赋值语句的翻译程序 编译原理 Java"这个主题,我们将深入探讨赋值语句在编程中的作用,编译原理的基本概念,以及如何使用Java来实现这样的翻译工具。 **赋值语句**是编程中最基础的元素之一,它用于改变变量的...

    java习题汇编.docx

    Java 基础知识点汇编 ...这些知识点涵盖了 Java 的基础知识,包括 Java 虚拟机、标识符、变量、数据类型、赋值语句、表达式、方法、注释、数据类型转换、常量、条件运算符、位运算符、数组、字符串和调试等方面。

    Java语言程序设计课后习题+答案.pdf

    知识点:Java赋值语句,赋值语句用于将值赋给变量。 14. 若所用变量都已正确定义,以下选项中,非法的表达式是( )。 答案:C) 'a' = 1/2 知识点:Java表达式,表达式不可以将整数除法结果赋值给char类型变量。...

    REPO:Java赋值技术III

    Java分配Java映射类必须使用其各自的Getter和Setter及其构造函数来完成。 应该可以在“创建人员”窗口中创建人员。 您应该能够看到在“人员列表”窗口中创建的所有人员除上述内容外,用户界面还必须在“标签”中包含...

    通过反射赋值的java代码

    使用反射技术对java实体类进行操作,得到所有属性并赋值给属性

    JAVA期末复习资料 含答案.pdf

    12. **Java赋值语句**: - 选项D中的`y + x = z;`是错误的,因为赋值语句的左侧不能是表达式。 13. **Java表达式**: - 选项B中的`a = 7 + b + c`是一个合法的赋值表达式,将7加上`b`和`c`的和赋值给`a`。而选项A...

    java数组赋值jie

    本文将详细介绍 Java 中数组赋值的几种方法,并提供相应的示例。 首先,我们来看**逐个赋值**。这种方法适用于数组元素需要独立设置的情况。例如,创建一个整型数组 `int[] arr`,我们可以直接通过索引来给每个元素...

    java中将数据库中数据赋值给Map对象源代码

    在Java开发中,特别是在使用Spring框架时,将数据库中的数据转换为Map对象是一种常见的操作。这样做可以简化数据处理,使得数据以键值对的形式存储,便于快速查找和使用。Spring框架提供了强大的数据访问抽象,包括...

    Java中赋值运算符.pdf

    在Java编程语言中,赋值运算符是用来将值分配给变量的符号,它们在程序中起着至关重要的作用。本文将深入探讨Java中的赋值运算符及其功能。 首先,最基础的赋值运算符是“=”。它将右边的值赋给左边的变量。例如,`...

Global site tag (gtag.js) - Google Analytics