Java反射实现调用带参方法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java反射实现调用带参方法

Java反射实现调用带参方法

 2013/10/12 12:28:33  点滴积累  程序员俱乐部  我要评论(0)
  • 摘要:importjava.lang.reflect.Method;importjava.lang.reflect.Field;importjava.beans.PropertyDescriptor;publicclassPropertyUtil{publicstaticPropertyDescriptorgetPropertyDescriptor(Classclazz,StringpropertyName){StringBuffersb=newStringBuffer()
  • 标签:方法 实现 Java 反射
class="java">
import?java.lang.reflect.Method;??
import?java.lang.reflect.Field;??
import?java.beans.PropertyDescriptor;??
??
public?class?PropertyUtil?{??
????public??static?PropertyDescriptor?getPropertyDescriptor(Class?clazz,?String?propertyName){??
????????StringBuffer?sb?=?new?StringBuffer();//构建一个可变字符串用来构建方法名称??
????????Method?setMethod?=?null;??
????????Method?getMethod?=?null;??
????????PropertyDescriptor??pd?=null;??
??????????
?????????try??
?????????{??
????????????Field?f?=?clazz.getDeclaredField(propertyName);//根据字段名来获取字段??
????????????if(f==null){??
????????????//构建方法的后缀??
????????????String?methodEnd?=?propertyName.substring(0,1).toLowerCase()+propertyName.substring(1);??
????????????sb.append("set"+methodEnd);//构建set方法??
????????????//构建set?方法??
????????????setMethod?=?clazz.getDeclaredMethod(sb.toString(),new?Class[]{f.getType()}?);??
????????????sb.delete(0,?sb.length());//清空整个可变字符串??
????????????sb.append("get"+methodEnd);//构建get方法??
????????????//构建get?方法??
????????????getMethod?=?clazz.getDeclaredMethod(sb.toString(),?new?Class[]{});??
????????????//构建一个属性描述器?把对应属性?propertyName?的?get?和?set?方法保存到属性描述器中??
????????????pd?=?new?PropertyDescriptor(propertyName,getMethod,setMethod);??
??????????}??
????????}catch(Exception?ex){??
????????????ex.printStackTrace();??????
????????}??
????????return?pd;??
????}??
??????
????public?static?void?setProperty(Object?obj,String?propertyName,Object?value){??
????????Class?clazz?=?obj.getClass();//获取对象的类型??
????????PropertyDescriptor?pd?=?getPropertyDescriptor(clazz,propertyName);//获取?clazz?类型中的?propertyName?的属性描述器??
????????Method?setMethod?=?pd.getWriteMethod();//从属性描述器中获取?set?方法??
????????try?{??
????????????setMethod.invoke(obj,?new?Object[]{value});//调用?set?方法将传入的value值保存属性中去??
????????}?catch?(Exception?e){??
????????????e.printStackTrace();??
????????}??
????}??
??????
????public?static?Object?getProperty(Object?obj,?String?propertyName){??
????????Class?clazz?=?obj.getClass();//获取对象的类型??
????????PropertyDescriptor??pd?=?getPropertyDescriptor(clazz,propertyName);//获取?clazz?类型中的?propertyName?的属性描述器??
????????Method?getMethod?=?pd.getReadMethod();//从属性描述器中获取?get?方法??
????????Object?value?=null?;??
?????????try?{??
????????????value?=?getMethod.invoke(clazz,?new?Object[]{});//调用方法获取方法的返回值??
????????}?catch?(Exception?e)?{??
????????????e.printStackTrace();??
????????}??
????????return?value;//返回值??
????}??
????}??
发表评论
用户名: 匿名