java Method类试用

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

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

  2. public class Model {

  3.     private String id;
  4.     private String name;
  5.     private String description;
  6.     
  7.     public Model() {
  8.         id = "id";
  9.         name = "name";
  10.         description = "description";
  11.     }

  12.     public String getId() {
  13.         return id;
  14.     }

  15.     public void setId(String id) {
  16.         this.id = id;
  17.     }

  18.     public String getName() {
  19.         return name;
  20.     }

  21.     public void setName(String name) {
  22.         this.name = name;
  23.     }

  24.     public String getDescription() {
  25.         return description;
  26.     }

  27.     public void setDescription(String description) {
  28.         this.description = description;
  29.     }

  30. }

第二步:
  1. package test;

  2. import java.lang.reflect.InvocationTargetException;
  3. import java.lang.reflect.Method;

  4. public class TestMethodReflect {

  5.     public static final String ID = "Id";
  6.     public static final String NAME = "Name";
  7.     public static final String DESCRIPTION = "Description";

  8.     //方法名集合
  9.     public static final String[] ALL = { ID, NAME, DESCRIPTION };

  10.     //这是测试数据
  11.     public static final String[] MODELDATA = { "1""Gavin",
  12.             "this is model's test data" };

  13.     /** *//**
  14.      * @param args
  15.      */
  16.     public static void main(String[] args) {
  17.         try {
  18.             //获得Model类
  19.             Class model = Class.forName("test.Model");
  20.             //获得Model类的实例
  21.             Object object = model.newInstance();
  22.             for (int i = 0; i < ALL.length; i++) {
  23.                 //获得Model类的set方法,参数为String类型
  24.                 Method setMethod = model.getMethod("set" + ALL[i], String.class);
  25.                 //调用set方法
  26.                 setMethod.invoke(object, MODELDATA[i]);

  27.                 //获得Model类的get方法,无参数
  28.                 Method getMethod = model.getMethod("get" + ALL[i], null);
  29.                 //调用get方法,并输出数据
  30.                 System.out.println(getMethod.invoke(object, null));
  31.             }
  32.         } catch (ClassNotFoundException e) {
  33.             // TODO Auto-generated catch block
  34.             e.printStackTrace();
  35.         } catch (SecurityException e) {
  36.             // TODO Auto-generated catch block
  37.             e.printStackTrace();
  38.         } catch (NoSuchMethodException e) {
  39.             // TODO Auto-generated catch block
  40.             e.printStackTrace();
  41.         } catch (IllegalArgumentException e) {
  42.             // TODO Auto-generated catch block
  43.             e.printStackTrace();
  44.         } catch (IllegalAccessException e) {
  45.             // TODO Auto-generated catch block
  46.             e.printStackTrace();
  47.         } catch (InvocationTargetException e) {
  48.             // TODO Auto-generated catch block
  49.             e.printStackTrace();
  50.         } catch (InstantiationException e) {
  51.             // TODO Auto-generated catch block
  52.             e.printStackTrace();
  53.         }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值