读书人

透过反射实现统一调用多个类的相似方法

发布时间: 2012-11-06 14:07:00 作者: rapoo

通过反射实现统一调用多个类的相似方法(这里是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 刚才有位朋友好像没加上 不好意思 请再加一次 :)

读书人网 >软件架构设计

热点推荐