
不可以,你可以想像一下,反射发生的时机和步骤。当通过反射获得了指定对象的Class对象之后,此时的对象是存放在堆内存中的,而且已经完成了编译,此时的对象是无法对其进行添加熟悉和方法的。换种思路,如果可以的话,那么修改厚的对象将不再是原有类的对象,那么原有类类型的引用变量引用当前对象势必报错。你可以写个例子试试。
class Test{
public static void main(String[] args) {
A a = new A();
Systemoutprintln(getValueInField(a,"b1","i"));
Systemoutprintln(getValueInField(a,"b2","i"));
Systemoutprintln(getValueInField(a,"b3","i"));
}
public static Object getValueInField(Object obj,String field,String name){
//三个参数分别是外部的类的对象obj,作为成员属性的类的引用名,要查询的类内部的属性名
try {
Object o = objgetClass()getDeclaredField(field)get(obj);
return ogetClass()getDeclaredField(name)get(o);
} catch (Exception e) {
Systemoutprintln("查找失败");
return null;
}
}
}
class A{
B b1 = new B(1);
B b2 = new B(2);
}
class B{
int i;
B(int i){
thisi = i;
}
}
你所说的"DataSet的各个属性值"都是DataSet对象的非静态栏位属性值
也就是说获取这些值都需要他的实例化对象,而您通过Type获取到的属性均是该类型的特徵,而并非对象的值
比如typeGetValue(对象,属性)等
你是想通过反射获得该类所有属性值或是给所有属性赋值吧。用getMethods获取所有的getter和setter方法,再取值或赋值。但不要用getDeclaredMethods,因为getMethods反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法;而getDeclaredMethods反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
这也许是框架注入属性值都采用setter注入的原因吧。
以上就是关于java 反射可以给对象添加方法和属性吗全部的内容,包括:java 反射可以给对象添加方法和属性吗、java反射获取一个实体类中的另外一个实体类中属性的值,两个实体类是关联关系。、C# 反射之如何获得DataSet属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)