java Method种试用

java Method类试用

背景:在项目中有一堆javabean,要用在界面上画一堆tableview,要对这一堆tableview进行排序,因此要写一堆sorter类(假如为每个tableview都写一个的话),工作量比较大。
        思考:其实这些sorter类都是差不多的,只是调用的javabean不同,方法名称不同,实现的原理,没有什么不同,那么该如何使用一个sorter类就可对所有的tableview进行排序呢?
        思考结果:也许可以用Class类与Method类,也就是什么reflect机制。
        困难:从来没用过reflect机制。

       没有过,没关系。JDK5.0文档与google是我最好的老师。
       下面就是我的成果了:
       第一步,先建个javabean:

java Method种试用package test;
java Method种试用
java Method种试用
public class Model {
java Method种试用
java Method种试用    
private String id;
java Method种试用    
private String name;
java Method种试用    
private String description;
java Method种试用    
java Method种试用    
public Model() {
java Method种试用        id 
= "id";
java Method种试用        name 
= "name";
java Method种试用        description 
= "description";
java Method种试用    }

java Method种试用
java Method种试用    
public String getId() {
java Method种试用        
return id;
java Method种试用    }

java Method种试用
java Method种试用    
public void setId(String id) {
java Method种试用        
this.id = id;
java Method种试用    }

java Method种试用
java Method种试用    
public String getName() {
java Method种试用        
return name;
java Method种试用    }

java Method种试用
java Method种试用    
public void setName(String name) {
java Method种试用        
this.name = name;
java Method种试用    }

java Method种试用
java Method种试用    
public String getDescription() {
java Method种试用        
return description;
java Method种试用    }

java Method种试用
java Method种试用    
public void setDescription(String description) {
java Method种试用        
this.description = description;
java Method种试用    }

java Method种试用
java Method种试用}

java Method种试用

        第二步:
java Method种试用package test;
java Method种试用
java Method种试用
import java.lang.reflect.InvocationTargetException;
java Method种试用
import java.lang.reflect.Method;
java Method种试用
java Method种试用
public class TestMethodReflect {
java Method种试用
java Method种试用    
public static final String ID = "Id";
java Method种试用    
public static final String NAME = "Name";
java Method种试用    
public static final String DESCRIPTION = "Description";
java Method种试用
java Method种试用    
//方法名集合
java Method种试用
    public static final String[] ALL = { ID, NAME, DESCRIPTION };
java Method种试用
java Method种试用    
//这是测试数据
java Method种试用
    public static final String[] MODELDATA = "1""Gavin",
java Method种试用            
"this is model's test data" }
;
java Method种试用
java Method种试用    
/**
java Method种试用     * 
@param args
java Method种试用     
*/

java Method种试用    
public static void main(String[] args) {
java Method种试用        
try {
java Method种试用            
//获得Model类
java Method种试用
            Class model = Class.forName("test.Model");
java Method种试用            
//获得Model类的实例
java Method种试用
            Object object = model.newInstance();
java Method种试用            
for (int i = 0; i < ALL.length; i++{
java Method种试用                
//获得Model类的set方法,参数为String类型
java Method种试用
                Method setMethod = model.getMethod("set" + ALL[i], String.class);
java Method种试用                
//调用set方法
java Method种试用
                setMethod.invoke(object, MODELDATA[i]);
java Method种试用
java Method种试用                
//获得Model类的get方法,无参数
java Method种试用
                Method getMethod = model.getMethod("get" + ALL[i], null);
java Method种试用                
//调用get方法,并输出数据
java Method种试用
                System.out.println(getMethod.invoke(object, null));
java Method种试用            }

java Method种试用        }
 catch (ClassNotFoundException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (SecurityException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (NoSuchMethodException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (IllegalArgumentException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (IllegalAccessException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (InvocationTargetException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }
 catch (InstantiationException e) {
java Method种试用            
// TODO Auto-generated catch block
java Method种试用
            e.printStackTrace();
java Method种试用        }

java Method种试用
java Method种试用    }

java Method种试用
java Method种试用}

java Method种试用

        ok,大功告成!
        成功后的思考:我只要在一个sorter类里添加一个classname的参数,添加一个methodName的参数(类型为String[]),用一个for循环就有可能用一个sorter类为每个tableview加入排序的功能。