zoukankan      html  css  js  c++  java
  • java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1、java利用反射机制判断对象的属性是否为空:

    Map<String,String> validateMap = new LinkedHashMap<String, String>();

    validateMap.put("serial", "编号");
    validateMap.put("major", "专业");
    public static <T> String validateFiledIsNull(Map<String,String> fileds,T obj) throws Exception{
    String ret ="";
    for(String key:fileds.keySet()){
    String getMethodStr = "get" + key.substring(0,1).toUpperCase()+key.substring(1);
    Method m = obj.getClass().getMethod(getMethodStr);
    Object value = m.invoke(obj);
    if(value==null || value.toString().trim().equals("")){
    if(!validateString(ret)){
    ret=fileds.get(key);
    }else{
    ret+=","+fileds.get(key);
    }
    }
    }
    return ret;
    }

    2、获取该属性的值:
    protected void setData(){
    //保存通过setAttr方法存储的数据
    Enumeration<String> attrs = getAttrNames();
    ArrayList<String> a = Collections.list(attrs);
    a.removeAll(Constants.exceptAttrs);//去除无关的数据
    for(String attrName : a){
    dataMap.put(attrName, getAttr(attrName));
    }

    //保存AppBaseController的protected属性的数据
    Field[] fields = AppBaseController.class.getDeclaredFields();
    for(Field field : fields){
    //设置对象的访问权限,保证对private的属性的访问
    // field.setAccessible(true);
    if(Modifier.PROTECTED == field.getModifiers()){
    try {
    Object value = field.get(this);
    if(value != null){
    setAttr(field.getName(), value);
    dataMap.put(field.getName(), value);
    }
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }
    }
    }


    3、 设置该属性的值:
    protected void setParams(){
    Enumeration<String> paraNames = getParaNames();
    ArrayList<String> a = Collections.list(paraNames);//参数名列表
    Field[] fields = AppBaseController.class.getDeclaredFields();//AppBaseController属性列表

    for(Field field : fields){
    field.setAccessible(true);//Modifier.PROTECTED == field.getModifiers();
    if("java.lang.String".equals(field.getType().getName())){//String类型的属性
    for(String paraName : a){
    String value = getPara(paraName);
    String paraLowerName = paraName.replaceAll("_", "").toLowerCase();
    if(paraLowerName.equals(field.getName().toLowerCase())){//如果参数名有对应的属性名则赋值
    try {
    field.set(this, value);
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
    }
  • 相关阅读:
    关闭窗体后,利用StreamWriter保存控件里面的数据
    ref传递
    C# 特性 Attribute
    关键字 new 的作用
    关键字 base 的作用
    关键字 this 的作用
    random类的使用
    数据库结果为 基于左右值排序的无限分类算法
    PHP显示日期、周几、农历初几、什么节日函数编程代码
    描述了say_hello函数的具体内容,调用zend_printf系统函数在php中打印字符串
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9235276.html
Copyright © 2011-2022 走看看