package com.heima;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
* 4、 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
* public void setProperty(Object obj, String propertyName, Object value){
*
* }
*/
public class Test04 {
static Property propertyNeme;
public static void main(String[] args) throws Exception {
// 根据题意创建两个对象
// 这里使用反射应该设置配置文件,从配置文件里获得对象名的但是在这里,就直接给出对象来动态获取对象名
// 提供对象名称的字符串
String className = "com.heima.Property";
Class clazz = Class.forName(className);
// 提供未知对象的属性名称
String fieldName = "propertyNeme";
Field field = clazz.getDeclaredField(fieldName);
// 获取指定的构造器。获取Person类中两个参数string,int的构造函数。
Constructor cons = clazz.getConstructor(String.class);
// 通过对象名称创建出对象obj value
Object obj = cons.newInstance("lufei");
Object value = cons.newInstance("namei");
// Property obj = new Property("lufei");
setProperty(obj, fieldName, value);
//System.out.println(obj.toString());
}
public static void setProperty(Object obj, String propertyName, Object value)
throws Exception {
/*
* Field f = obj.getClass().getDeclaredField(propertyName);
* f.setAccessible(true); f.set(obj, value); }
*/
}
class Property {
// 给对象显示初始化
private String propertyNeme;
public Property(String propertyNeme) {
super();
this.propertyNeme = propertyNeme;
}
public Property() {
super();
// TODO Auto-generated constructor stub
}
public String getPropertyNeme() {
return propertyNeme;
}
public void setPropertyNeme(String propertyNeme) {
this.propertyNeme = propertyNeme;
}
}
} |
|