WEB开发网
开发学院软件开发Java Java 编程的动态性,第 2部分: 引入反射 阅读

Java 编程的动态性,第 2部分: 引入反射

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 清单4进一步阐述字段实例,显示反射正在运行的方法的一个实例,Java 编程的动态性,第 2部分: 引入反射(5),这种方法增加一个定义有 get 和 set 方法的 int JavaBean属性,例如,因此,当我在实例中调用 get 方法时,如果对象为一个整数 count 值定义了 getCou

清单4进一步阐述字段实例,显示反射正在运行的方法的一个实例。这种方法增加一个定义有 get 和 set 方法的 int JavaBean属性。例如,如果对象为一个整数 count 值定义了 getCount 和 setCount 方法,您可以在一次调用中向该方法传递“count”作为 name 参数,以增加该值。

清单4:通过反射增加一个JavaBean 属性

public int incrementProperty(String name, Object obj) { 
  String prop = Character.toUpperCase(name.charAt(0)) + 
    name.substring(1); 
  String mname = "get" + prop; 
  Class[] types = new Class[] {}; 
  Method method = obj.getClass().getMethod(mname, types); 
  Object result = method.invoke(obj, new Object[0]); 
  int value = ((Integer)result).intValue() + 1; 
  mname = "set" + prop; 
  types = new Class[] { int.class }; 
  method = obj.getClass().getMethod(mname, types); 
  method.invoke(obj, new Object[] { new Integer(value) }); 
  return value; 
} 

为了遵循JavaBeans惯例,我把属性名的首字母改为大写,然后预先考虑 get 来创建读方法名, set 来创建写方法名。JavaBeans读方法仅返回值,而写方法使用值作为唯一的参数,因此我规定方法的参数类型以进行匹配。最后,该惯例要求方法为公共,因此我使用查找格式,查找类上可调用的公共方法。

这一实例是第一个我使用反射传递主值的实例,因此现在我们来看看它是如何工作的。基本原理很简单:无论什么时候您需要传递主值,只需用相应封装类的一个实例(在 java.lang 包中定义)来替换该类主值。这可以应用于调用和返回。因此,当我在实例中调用 get 方法时,我预计结果为实际 int 属性值的 java.lang.Integer 封装。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Java 编程 动态性

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