
Class<> obj=ClassforName(refgetClass()getName());
Object object = objnewInstance();
Method method=objgetMethod("getLength");
你这样拿到的是你newInstance新构建的对象,又不是你之前设定了值的对象,域当然会是0
应该是这样:methodinvoke(ref)
你是想通过反射获得该类所有属性值或是给所有属性赋值吧。用getMethods获取所有的getter和setter方法,再取值或赋值。但不要用getDeclaredMethods,因为getMethods反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法;而getDeclaredMethods反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
这也许是框架注入属性值都采用setter注入的原因吧。
反射说白了就是可以获得一个类的所有信息,主要包括方法和属性两部分。
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
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
Fieldget(null) 附上文档 public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException返回指定对象上此 Field 表示的字段的值。如果该值是一个基本类型值,则自动将其包装在一个对象中。
反射不是通过get取值的,是通过该对象的信息,比如说名称、内存地址等来访问类,方法,属性等,可以获取任意对象的信息,但不能获得私有属性(private String s=“sd”;)的值,切记
推荐《JAVA核心技术》这本书会对你有帮助的
反射可以获取到属性类型,Field类里面有个方法,getType()就是获取属性类型的。。。
下面是个示例代码。。。
public
static
void
main(String
args[])
{
People
peo
=
new
People();
Class
cla
=
Peopleclass;
try
{
Field[]
fields
=
clagetFields();
for(Field
field:fields){
Class
c
=
fieldgetType();
if(c==Stringclass){
fieldset(peo,
"EMPTY");
}else
if(c==Integerclass){
fieldset(peo,
0);
}
}
}
catch
(SecurityException
e)
{
//
TODO
Auto-generated
catch
block
eprintStackTrace();
}catch
(IllegalArgumentException
e)
{
//
TODO
Auto-generated
catch
block
eprintStackTrace();
}
catch
(IllegalAccessException
e)
{
//
TODO
Auto-generated
catch
block
eprintStackTrace();
}
}
主要就是用Class
c
=
fieldgetType();
这个来获取类型。。。。
希望能帮到你。。。仍有问题可以Hi我。。。或者直接追问。。。
以上就是关于怎样通过反射获得一个类的属性值或者方法返回值全部的内容,包括:怎样通过反射获得一个类的属性值或者方法返回值、通过反射,如何获得子类继承自父类的属性、说说对java反射的理解,使用反射如何获取一个类的所有方法,使用反射需要注意哪些问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)