Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值

Python012

Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值,第1张

利用反射

//假设类名为A

// 实例化类

A  p = new A()

// 获取class

Class c = p.getClass()

// 获取该类所有的字段

Field[] fields = c.getDeclaredFields()

// 遍历赋值

for (int i = 0 i < fields.length i++) {

String filedName = fields[i].getName()

// AccessibleTest类中的成员变量为private,故必须进行此操作

fields[i].setAccessible(true)

// 判断类型

Class<?> type=fields[i].getType()

//获取字段类型

String typeName=type.getName()

System.out.println(type.getName())

// 对字段进行赋值 第一个参数为对象引用第二个参数为要附的值

//如果为字符串类型

if("java.lang.String".equals(typeName)){

fields[i].set(p, "1")

}

//如果为日期类型

else if("java.util.Date".equals(typeName)){

fields[i].set(p, new Date())

}

else{

fields[i].set(p, 1)

}

}

//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。

最后希望楼主多看看java 文档。

private,public类似与 WEB系统中管理员,普通用户权限 . 是一种权限安全机制 反射的主要目的并不在与看到私有方法,更重要的是能在运行时可以动态自查自己的结构,在开发某些功能时特别有用, 例如:(1)把XML节点自动映射后JAVA BEAN中.

JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。

Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。

扩展资料:

JAVA中反射实例:

1、Class superClass=clazz.getSuperclass()//获取父类。

System.out.println("getSuperclass:"+superClass)。   

2、Class[] interfaces=clazz.getInterfaces()//获取实现接口。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors()//构造方法。

System.out.println("getConstructors:"+cons.length)。

参考资料来源:百度百科: JAVA反射机制