通过反射查找子类、父类的属性(子类找不到则到父类找)

摘要:
=Object.class;clazz=clazz.getSuperclass()){try{field=clazz.getDeclaredField;}catch{log.warn;}}returnfield;}/***属性设值**@paramo子类对象*@paramfieldName属性名*@paramvalue需要设置的属性值*/publicstaticvoidsetFieldValue{Fieldfield=getDeclareField;if(field!
packagecn.ucmed.pangu.lib;
importlombok.extern.slf4j.Slf4j;
importjava.lang.reflect.Field;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
@Slf4j
public classReflectionUtil {
    /**
     * 根据属性名查找对应的属性,子类没有的属性会到父类找
     *
     * @paramo
     * @paramfieldName
     * @return
     */
    public staticField getDeclareField(Object o, String fieldName) {
        Field field = null;
        Class<?> clazz =o.getClass();
        for (; clazz != Object.class; clazz =clazz.getSuperclass()) {
            try{
                field =clazz.getDeclaredField(fieldName);
            } catch(NoSuchFieldException e) {
                log.warn("bean没有该属性,bean = " + clazz.getName() + ",属性 = " +fieldName);
            }
        }
        returnfield;
    }
    /**
     * 属性设值
     *
     * @paramo         子类对象
     * @paramfieldName 属性名
     * @paramvalue     需要设置的属性值
     */
    public static voidsetFieldValue(Object o, String fieldName, Object value) {
        Field field =getDeclareField(o, fieldName);
        if (field != null) {
            field.setAccessible(true);
            try{
                field.set(o, value);
            } catch(IllegalAccessException e) {
                e.printStackTrace();
            }
        } else{
            log.error("对象没有该属性,对象 = " + o.getClass() + " 属性 = " +fieldName);
        }
    }
    public staticObject getFieldName(Object o, String fieldName) {
        Field field =getDeclareField(o, fieldName);
        if (field != null) {
            field.setAccessible(true);
            try{
                returnfield.get(o);
            } catch(IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    /**
     * 获取对象所有的属性,包括父类的属性
     *
     * @paramo
     * @return
     */
    public staticField[] getAllProperties(Object o) {
        Class clazz =o.getClass();
        List<Field> fieldList = new ArrayList<>();
        while (clazz != null) {
            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            clazz =clazz.getSuperclass();
        }
        Field[] fields = newField[fieldList.size()];
        fieldList.toArray(fields);
        returnfields;
    }
}

免责声明:文章转载自《通过反射查找子类、父类的属性(子类找不到则到父类找)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS获取一行2列的表格数据Tesseract识别图片提取文字&amp;amp;字库训练下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MS COCO 数据集学习笔记(Common Objects in COntext)

一、数据来源 COCO中图片资源均引用自Flickr图片网站 二、数据集创建目的 进行图像识别训练,主要针对以下三个方向: (1)object instances (2)object keypoints (3)image captions 每个方向均包含训练和验证集两个标注文件 三、标注体结构 三个方向均共享基本类型信息,包括info、image、lice...

Mybatis拦截器实现SQL性能监控

Mybatis拦截器只能拦截四类对象,分别为:Executor、ParameterHandler、StatementHandler、ResultSetHandler,而SQL数据库的操作都是从Executor开始,因此要记录Mybatis数据库操作的耗时,需要拦截Executor类,代码实现如下: /*** 数据库操作性能拦截器,记录耗时 * @Inte...

SkylineGlobe 邻近度(Proximity)分析JavaScript源代码

邻近度(Proximity)描述了地理空间中两个地物距离相近的程度,是空间分析的一个重要手段。 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ToolTitle</title> <script language=...

C++ ORM ODB入门

1.ORM ORM, Object Relational Mapping, 对象关系映射,用来将基于对象的数据结构映射到SQL的数据结构中。即将基于对象的数据映射到关系表中的字段,然后我们可以通过对象提供的接口来操作数据库,而无需写sql语句来操作数据库。一般一张关系表对应两个类,一个实体类和一个操作类。ORM是一种框架,而不是一种实现。 2.C++ 的O...

JAVA对象克隆

   1> 为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。 2> 在派生类中覆盖基类的clone(),并声明为public。3> 在派生类的clone()方法中,调用super.clone()。4> 在派生类中实现Cloneable接口。4> 没有抽象方法的接口叫标识接口。5> 为什么我们在派...

获取Object对象的length

所有JS程序猿(甚至不止JS)都知道,数组(Array)是有length的,通过length属性,可以很方便的获取数组的长度。可以说,只要使用到了数组,就必会使用到其length属性。  而Object对象是没有length属性或方法的,它确实没有存在的必要,因为人们只会在乎该对象能提供什么样的方法,而没有必要知道它到底有多少方法。的确,这确实不是一个普遍性...