源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java 采用反射获取class属性值的实现代码

  • 时间:2022-05-26 23:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java 采用反射获取class属性值的实现代码
原理:Java的反射能够获取属性的名称,然后通过invoke调用类的某个方法。 比如有个属性叫userName,这个类写了个方法叫getUserName,通过invoke调用getUserName这个方法。 [b]代码如下 [/b]
[u]复制代码[/u] 代码如下:
import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class ParameterBase {     /**      * Get Class field and value Map      * @return      */     public Map<String, String> getClassInfo()     {         Map<String ,String>  fieldsAndValues = new HashMap<String, String>();         Field [] fields = this.getClass().getDeclaredFields();         for(int i=0; i< fields.length; i++)         {             Field f = fields[i];             String value = getFieldValue(this ,f.getName()).toString();             fieldsAndValues.put(f.getName(),value);         }       return fieldsAndValues;     }          private  String getFieldValue(Object owner, String fieldName)     {         return invokeMethod(owner, fieldName,null).toString();     }         /**      *      * 执行某个Field的getField方法      *      * @param owner 类      * @param fieldName 类的属性名称      * @param args 参数,默认为null      * @return      */     private   Object invokeMethod(Object owner, String fieldName, Object[] args)     {         Class<? extends Object> ownerClass = owner.getClass();         //fieldName -> FieldName          String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);         Method method = null;         try         {             method = ownerClass.getMethod("get" + methodName);         }         catch (SecurityException e)         {             //e.printStackTrace();         }         catch (NoSuchMethodException e)         {             // e.printStackTrace();             return "";         }         //invoke getMethod         try         {             return method.invoke(owner);         }         catch (Exception e)         {             return "";         }     } }
写一个类User继承于ParameterBase并写上一个测试代码
[u]复制代码[/u] 代码如下:
public class User extends ParameterBase {     String userName ;     String passWorld;     public String getUserName()     {         return userName;     }     public void setUserName(String userName)     {         this.userName = userName;     }     public String getPassWorld()     {         return passWorld;     }     public void setPassWorld(String passWorld)     {         this.passWorld = passWorld;     }     public static void main(String[] args)     {         User u = new  User();         u.passWorld = "123";         u.userName = "aaaaa";         System.out.println(u.getClassInfo().toString());     } }
[b]程序输出 [/b]
[u]复制代码[/u] 代码如下:
{passWorld=123, userName=aaaaa}
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部