import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
* 通过反射取得对象的方法
* 1、建立一个Person普通类
* 2、引用要反射的对象并创建该对象;
* 3、通过Class类的getMethod方法获取setName以及getName方法
* 4、调用Method的invok(Object(Person),方法参数)方法设置或取得成员变量
* 5、输出
*/
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String args[]) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
String attribute = "name";
String value = "测试通过";
Class<?> cls = Person.class; //反射对象
Object obj = cls.newInstance(); //实例化一个Object类型对象
Method setMethod = cls.getMethod("set" + initcap(attribute),String.class); //获取setName方法,返回值为Method类型
setMethod.invoke(obj, value); //通过invoke方法调用,返回值为Object类型
Method getMethod = cls.getMethod("get" + initcap(attribute)); //获取getName方法,返回值为Method类型
Object ret = getMethod.invoke(obj); //通过invoke方法调用,返回值为Object类型
System.out.println(ret); //取得并输出getName方法的返回值
}
//开头大小写转换
public static String initcap(String str) {
return str.substring(0,1).toUpperCase() + str.substring(1); //从脚标1开始的子字符串
}
}
import java.lang.reflect.Executable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
* 通过反射取得对象的方法
* 1、建立一个Person普通类
* 2、引用要反射的对象并创建该对象;
* 3、通过Class类的getMethod方法获取setName以及getName方法
* 4、调用Method的invok(Object(Person),方法参数)方法设置或取得成员变量
* 5、输出
*/
class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Test {
public static void main(String args[]) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
String attribute = "name";
String value = "测试通过";
Class<?> cls = Person.class; //反射对象
Object obj = cls.newInstance(); //实例化一个Object类型对象
Method setMethod = cls.getMethod("set" + initcap(attribute),String.class); //获取setName方法,返回值为Method类型
setMethod.invoke(obj, value); //通过invoke方法调用,返回值为Object类型
Method getMethod = cls.getMethod("get" + initcap(attribute)); //获取getName方法,返回值为Method类型
Object ret = getMethod.invoke(obj); //通过invoke方法调用,返回值为Object类型
System.out.println(ret); //取得并输出getName方法的返回值
}
//开头大小写转换
public static String initcap(String str) {
return str.substring(0,1).toUpperCase() + str.substring(1); //从脚标1开始的子字符串
}
}
740

被折叠的 条评论
为什么被折叠?



