黑马程序员技术交流社区
标题:
一道题的疑惑
[打印本页]
作者:
王浩龙
时间:
2014-3-18 14:44
标题:
一道题的疑惑
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 第三题:3、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
* public void setProperty(Object obj, String propertyName, Object value){
* }
* @author Administrator
*
*/
public class Test3 {
public void setProperty(Object obj, String propertyName, Object value) throws Exception{
//把obj对象当作javaBean来看,可以通过new PropertyDescriptor(propertyName, obj.getClass())得到想对于propertyName的属性
PropertyDescriptor pd = new PropertyDescriptor(propertyName, obj.getClass());
Method setPropertyName = pd.getWriteMethod();//用属性中得到写的方法得到setXxx方法
setPropertyName.invoke(obj, value);//调用setXxx的invoke方法改变obj对象propertyName的值为value
}
}
复制代码
上面这道题中如果,obj对象中没有关于propertyName的属性的setXxx方法怎么办?
作者:
张东健
时间:
2014-3-19 20:32
是这样的,真正的概念要说清楚的话字段和属性是不一样的,我们写了一个类,有一些成员变量,但是如果这些变量没有get ,set方法的话,只能称为字段而不能称为属性,所以在你的疑问中如果那个变量没有set方法,那么他就根本不是属性,也就谈不上为属性赋值了
作者:
张东健
时间:
2014-3-19 20:36
在BS架构中,从页面前端的数据传到服务器的数据是封装在JavaBean中的,假如在这个java中的某个成员变量没有set get方法的话,在服务端是得不到相应的数据的,也就是说服务端获取某个字段数据就是根据该字段是否有set get方法
作者:
e.c
时间:
2014-3-19 20:36
本帖最后由 e.c 于 2014-3-19 20:39 编辑
通过Class这个入口可以拿类的Fields字段。可以获有类的所取字段。获取到后可以对具体对象操作。比如获取对象字段的值或给其赋值。如果是private的话。暴力反射。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2