atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

1. core.setProperty(o, "materialId", null); 1

2. Java Reflection (JAVA反射) 1

3. 反射的用处 2

4. Java类反射中所必须的类: 2

BeanUtils.copyProperty 2

5. BeanUtils.setProperty 2

6. 参考 4

1. core.setProperty(o, "materialId", null);

BeanUtils1.6.1  copyProperty 韩式setProperty都有个bug...

Yaosi prpty shg Integer...,,sett null的时候儿不起效率,不个它变化为0..def convertyeu prob l ....

Yanen reg custm convert l .zeush pa effice zaid code l ...zihao gazi write nwe d le ...

2. Java Reflection (JAVA反射)

Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。

Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中 LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

反射本身并不 是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机 制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用 所描述行为的状态和相关的语义

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

3. 反射的用处

JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。

系统的灵活性、可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能

4. Java类反射中所必须的类:

Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。

Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。

Field 类的setAccessible方法,它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false。另外 Field类还有set(Object AttributeName,Object value)方法,可以改变指定属性的值。

BeanUtils.copyProperty

5. BeanUtils.setProperty

BeanUtils.setProperty(java.lang.Object bean,java.lang.String name,java.lang.Object value)

这 个方法让我郁闷了一会,因为它提供的功能与上面说的BeanUtils.copyProperty(java.lang.Object bean,java.lang.String name,java.lang.Object value)完全一致,apache的hero们没理由为同一功能提供两种展示方法啊,后来我看了 apache.commons.beanutils.BeanUtilsBean中的javadoc,才明白了一点点.如果我们只是为bean的属性赋值 的话,使用copyProperty()就可以了;而setProperty()方法是实现BeanUtils.populate()(后面会说到)机制 的基础,也就是说如果我们需要自定义实现populate()方法,那么我们可以override setProperty()方法.

所以,做为一般的日常使用,setProperty()方法是不推荐使用的.

BeanUtils.populate(java.lang.Object bean, java.util.Map properties)

使 用一个map为bean赋值,该map中的key的名称与bean中的成员变量名称相对应.注意:只有在key和成员变量名称完全对应的时 候,populate机制才发生作用;但是在数量上没有任何要求,如map中的key如果是成员变量名称的子集,那么成员变量中有的而map中不包含的项 将会保留默认值;同样,如果成员变量是map中key的子集,那么多余的key不会对populate的结果产生任何影响.恩,结果就是populate 只针对map中key名称集合与bean中成员变量名称集合的交集产生作用.(很饶口啊)

正常用法很简单,这里略掉.

同样,这个方法也支持对数组中单个元素,map中单个元素和嵌套属性的赋值,具体做法和copyProperty()方法类似,具体如下:

values.put("words[1]","U");

values.put("map(home)","remote");

values.put("sample.display",new Double(5.0));

注意:apache的javadoc中,明确指明这个方法是为解析http请求参数特别定义和使用的,在正常的使用中不推荐使用.他们推荐使用BeanUtils.copyProperties()方法.(struts中的FormBean应该是用这个方法装配的)

public static void setProperty(Object obj,String properName,Object val)  {

try {

//BeanUtils.copyProperty(obj, properName, val);

Field fld=obj.getClass().getDeclaredField(properName);

fld.setAccessible(true);

fld.set(obj, val);

//BeanUtils.setProperty

} catch (IllegalAccessException e) {

//  attilax 老哇的爪子 8:23:56 PM   Jul 19, 2014

core.warn(e);

} catch (SecurityException e) {

//  attilax 老哇的爪子 11:15:33 PM   Jul 19, 2014

e.printStackTrace();

} catch (NoSuchFieldException e) {

//  attilax 老哇的爪子 11:15:33 PM   Jul 19, 2014

e.printStackTrace();

}

}

6. 参考

BeanUtils取得对象属性值格式 - 综合编程 - 次元立方网 - 电脑知识与技术互动交流平台.htm (可以自己定义converter,只要实现Converter接口或者继承AbstractConverter类)

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

时间: 2024-10-12 00:05:13

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug的相关文章

atitit.java方法属性赋值and BeanUtils 1.6.1 .copyProperty的bug

atitit.java分配给属性值方法and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId", null); 1 2. Java Reflection (JAVA反射) 1 3. 反射的用处 2 4. Java类反射中所必须的类: 2 BeanUtils.copyProperty 2 5. BeanUtils.setProperty 2 6. 參考 4 1. core.setProperty(o

java length属性 length()方法 size()方法

length是属性,一般用来说明数组的长度 length()是方法,针对字符串String说的,用来求数组中某个元素的字符串长度 String str={"adfasf","sdufmd"}; System.out.println(str.length); 输出数组长度2 System.out.prinln(str[1].length()); 输出数组中第2个字符串长度6 size()是针对泛型集合而言,用于计算对象大小,查看泛型中有多少个元素. public st

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

java反射系列六之调用属性与方法

调用指定属性 package reflect; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class TestFiled { public static void main(String[] args) throws Exception { TestFiled t = new TestFiled(); t.test3(); } //调用运行时类中的指定的属性 public void test

java类(Class)的概念;对象的概念,声明类的属性 和方法,

类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网红.明星.草根.宅男.萝莉.沙雕 [3] 类可以理解为现实生活中所说的 “类型” 为什么会有类的概念? 现实生活中为了更好的区分事物,把事物进行归类,进而更好的认识事物. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物 对象的概念 对象是类的具体实现,表示一个独立的.唯一的个体.

通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值

package com.Summer_0426.cn; /** * @author Summer * 通过supper()有参构造器,完成子类对象调用父类属性的方法,并完成赋值 * */ public class Test01 { public static void main(String[] args) { JavaTeacher guoxiang = new JavaTeacher("郭襄");//子类实例化,并传入参数 guoxiang.giveLesson();//输出结果,

java 通过反射调用属性,方法,构造器

package reflection2; import static org.junit.Assert.assertArrayEquals; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.junit.jupiter

理解JAVA - 面向对象(object) - 属性,方法

理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法: 面向对象,人类认知世界的方式:生活中每天都在多态:    这个人是谁,这是个人,多态来看待他了:    他是老师  把它向下造型来看待了,他是老师,知道他能讲课了,老师是人下面的子类型: 我们每天都已多态来接收事物,然后向下造型:    这是人,这人是老师:    这是车,这车是奥迪 小时候,不知到是什么,就问这是什么东西,世间万物都能成

Java 面向对象 的属性 和 方法 的使用 (Java 学习中的小记录)

Java 面向对象 的属性  和 方法 的使用        作者:王可利(Star·星星) //car 的属性方法 class Car { //属性 格式:数据类型 变量名 String color; String name; int wheelNumber; public void run(){ System.out.println("run 的方法 汽车启动了~"); } } //主函数的方法 class Star1 { public static void main(Strin