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();
    }
    }
    }
    }
    }
    }
  • 相关阅读:
    java.util.date java.sql.date java.sql.timestamp
    javadoc生成文档时,编码 GBK 的不可映射字符
    java关于ServletConfig FilterConfig什么用
    在项目中用run as java aplication调试类
    replace和replaceAll
    在easyui中的datagrid中使用行内编辑时textarea的换行保存到mysql数据库为\n
    [转] 设计模式另类版
    [转] 不错的俄罗斯方块程序代码(VC++版)
    [转] 30道模拟经典题(JDK1.4)(附解答)
    [转] C#排序算法
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9235276.html
Copyright © 2011-2022 走看看