
Java代码
package ;
import java lang reflect Field;
import java lang reflect InvocationTargetException;
import java lang reflect Method;
public class TestBean {
private int age;
public static void main(String []args) throws InstantiationException IllegalAccessException SecurityException NoSuchFieldException{
try {
Class<> class =Class forName( TestBean );
Object tObject=class newInstance();
Field field=class getDeclaredField( age );
field setAccessible(true); //设置私有属性范围
field set(tObject );
System out print(field get(tObject));
try {
Method method=class getMethod( setAge int class);
method invoke(tObject );
Method getMethod=class getMethod( getAge );
System out println(getMethod invoke(tObject));
} catch (NoSuchMethodException e) {
// TODO Auto generated catch block
e printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto generated catch block
e printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto generated catch block
e printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto generated catch block
e printStackTrace();
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
this age = age;
}
lishixinzhi/Article/program/Java/hx/201311/26324
反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。
1获得方法包括获得方法的名称,方法的返回类型,方法的访问修饰符,以及通过反射执行这个方法。
2获得属性包括属性的名称,类型,访问修饰符,以及这个属性的值。
这些获得都有相应的API提供 *** 作。
举个例子:
先定义一个类,有age这个属性,以及age的get和set方法:
public class TestRflectionFather {
public int age =32;
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
}
然后 *** 作获得所有方法:
import javalangreflectMethod;
public class Testmain {
public static void main(String[] args) throws Exception {
Class clazz = ClassforName("TestRflectionFather");
Method[] methods =clazzgetDeclaredMethods();
for(Method me:methods)
{
Systemoutprintln(megetName());
}
}
}
//最后输出
getAge
setAge
你是想通过反射获得该类所有属性值或是给所有属性赋值吧。用getMethods获取所有的getter和setter方法,再取值或赋值。但不要用getDeclaredMethods,因为getMethods反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法;而getDeclaredMethods反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
这也许是框架注入属性值都采用setter注入的原因吧。
Fieldget(null) 附上文档 public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中。
Type t = typeof(Program);
foreach (PropertyInfo p in tGetProperties()) {
object[] o = pGetCustomAttributes(true);
}
以上就是关于Java反射设置私有属性和获取属性全部的内容,包括:Java反射设置私有属性和获取属性、说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题、通过反射,如何获得子类继承自父类的属性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)