通过反射实现统一调用多个类的相似方法(这里是get())
*************************************************************************************************
2007/3/3? 星期六
?????? author:?by??? Mircle_wang
????????title:??? reflect
??????? qq:83529101
???? 希望对大家有帮助,也欢迎交流 :??共同进步
**************************************************************************************************
src?
??? Student
??? Teacher??????????? 被加载类
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package src;
public class Student {
?private Integer id;
?private String name;
?private Integer age;
?private String email;
?// id
?public void setId(Integer id) {
??this.id = id;
?}
?public Integer getId() {
??return this.id;
?}
?// age
?public void setAge(Integer age) {
??this.age = age;
?}
?public Integer getAge() {
??return age;
?}
?// name
?public void setName(String name) {
??this.name = name;
?}
?public String getName() {
??return name;
?}
?// email
?public void setEmail(String email) {
??this.email = email;
?}
?public String getEmail() {
??return email;
?}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package src;
public class Teacher {
?private Integer id;
?private String name;
?private Integer age;
?// id
?public void setId(Integer id) {
??this.id = id;
?}
?public Integer getId() {
??return id;
?}
?// name
?public void setName(String name) {
??this.name = name;
?}
?public String getName() {
??return name;
?}
?// age
?public void setAge(Integer age) {
??this.age = age;
?}
?public Integer getAge() {
??return age;
?}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
util
??? CallAnyMethod?????? 反射类
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CallAnyMethod {
?public static void convert(String className, Object classNameobj,
???Object[] para) throws ClassNotFoundException,
???IllegalArgumentException, IllegalAccessException,
???InvocationTargetException {
??Class c = Class.forName(className);
??Method[] methList = c.getDeclaredMethods();
??System.out.println(c.getName());
??for (int i = 0; i < methList.length; i++) {
???// if((methList[i].getName().indexOf("get"))!=-1)
???if (methList[i].getName().startsWith("get")) {
????Object o = methList[i].invoke(classNameobj, para);
????System.out
??????.println(methList[i].getName().substring(3) + ":" + o);
???}
??}
?}
?public static void convert(String className, Object classNameobj)
???throws ClassNotFoundException, IllegalArgumentException,
???IllegalAccessException, InvocationTargetException {
??convert(className, classNameobj, null);
?}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
main
??? TestRef??????? 验证类
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package main;
import java.lang.reflect.InvocationTargetException;
import src.Student;
import src.Teacher;
import util.CallAnyMethod;
public class TestRef {
?/**
? * @param args
? * @throws InstantiationException
? */
?public static void main(String[] args) throws InstantiationException {
??// TODO Auto-generated method stub
??// student set
??Student stu = new Student();
??stu.setId(1);
??stu.setAge(24);
??stu.setName("张三");
??stu.setEmail("ho@hotmail.com");
??// teacher set
??Teacher tec = new Teacher();
??tec.setId(2);
??tec.setAge(23);
??tec.setName("李笑");
??try {
???CallAnyMethod.convert("src.Student", stu);
???//System.out.println(Thread.currentThread().getName());
???//System.out.println(Class.forName("src.Student").getName());
???
???CallAnyMethod.convert("src.Teacher", tec);
??} catch (IllegalArgumentException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (ClassNotFoundException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (IllegalAccessException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??} catch (InvocationTargetException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
?}
}
? //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
运行结果:
src.Student
Age:24
Email:ho@hotmail.com
Name:张三
Id:1
src.Teacher
Age:23
Name:李笑
Id:2
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?
1 楼 mircle 2007-03-06 刚才有位朋友好像没加上 不好意思 请再加一次 :)