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();
    }
    }
    }
    }
    }
    }
  • 相关阅读:
    ES6中的export,import ,export default
    centos7 安装php 多线程pthreads
    ubuntu系统安装nginx出现的错误(依赖环境没有安装完)
    ubuntu彻底干净卸载MySQL、Apache2、Php的方法(各版本通用
    mysql-ubuntu14.04彻底卸载mysql
    centos 中GTK的安装
    centos 安装cmake 3.3.2
    yum安装方式的php,切换NTS为ZTS版本
    eclipse中jad反编译工具的安装
    在SpringMVC中获取request对象的几种方式
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9235276.html
Copyright © 2011-2022 走看看