WEB开发网
开发学院软件开发Java Java 编程的动态性,第 8 部分: 用代码生成取代反... 阅读

Java 编程的动态性,第 8 部分: 用代码生成取代反射

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 设置阶段清单 1 给出了应用程序的起点,这里定义了一个简单的 bean 类 HolderBean 和一个访问类 ReflectAccess ,Java 编程的动态性,第 8 部分: 用代码生成取代反射(2),访问类有一个命令行参数,该参数必须是一个值为 int 的 bean 类属性的名字( va

设置阶段

清单 1 给出了应用程序的起点。这里定义了一个简单的 bean 类 HolderBean 和一个访问类 ReflectAccess 。访问类有一个命令行参数,该参数必须是一个值为 int 的 bean 类属性的名字( value1 或者 value2 )。它增加指定属性的值,然后在退出前打印出这两个属性值。

清单 1. 反射一个 bean

public class HolderBean 
{ 
  private int m_value1; 
  private int m_value2; 
   
  public int getValue1() { 
    return m_value1; 
  } 
  public void setValue1(int value) { 
    m_value1 = value; 
  } 
   
  public int getValue2() { 
    return m_value2; 
  } 
  public void setValue2(int value) { 
    m_value2 = value; 
  } 
} 
public class ReflectAccess 
{ 
  public void run(String[] args) throws Exception { 
    if (args.length == 1 && args[0].length() > 0) { 
       
      // create property name 
      char lead = args[0].charAt(0); 
      String pname = Character.toUpperCase(lead) + 
        args[0].substring(1); 
       
      // look up the get and set methods 
      Method gmeth = HolderBean.class.getDeclaredMethod 
        ("get" + pname, new Class[0]); 
      Method smeth = HolderBean.class.getDeclaredMethod 
        ("set" + pname, new Class[] { int.class }); 
       
      // increment value using reflection 
      HolderBean bean = new HolderBean(); 
      Object start = gmeth.invoke(bean, null); 
      int incr = ((Integer)start).intValue() + 1; 
      smeth.invoke(bean, new Object[] {new Integer(incr)}); 
       
      // print the ending values 
      System.out.println("Result values " + 
        bean.getValue1() + ", " + bean.getValue2()); 
       
    } else { 
      System.out.println("Usage: ReflectAccess value1|value2"); 
    } 
  } 
} 

上一页  1 2 3 4 5 6 7  下一页

Tags:Java 编程 动态性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接