集册 Java实例教程 返回给定属性的字段,无论该字段是可见的还是隐藏的,或者是在给定的类或超类中声明的。

返回给定属性的字段,无论该字段是可见的还是隐藏的,或者是在给定的类或超类中声明的。

欢马劈雪     最近更新时间:2020-01-02 10:19:05

563
返回给定属性的字段,无论该字段是可见的还是隐藏的,或者是在给定的类或超类中声明的。

/*

 * Copyright (c) 2012 Data Harmonisation Panel

 * 

 * All rights reserved. This program and the accompanying materials are made

 * available under the terms of the GNU Lesser General Public License as

 * published by the Free Software Foundation, either version 3 of the License,

 * or (at your option) any later version.

 * 

 * You should have received a copy of the GNU Lesser General Public License

 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.

 * 

 * Contributors:

 *     HUMBOLDT EU Integrated Project #030962

 *     Data Harmonisation Panel <http://www.dhpanel.eu>

 */

//package com.nowjava;


import java.lang.reflect.Field;
/*
NowJava.com 提 供
*/


public class Main {

    /**

     * Returns a field for a given property, no matter if the field is visible

     * or hidden or if it is declared in the given class or in a superclass.

     * 

     * @param c the class which would contain the field

     * @param property the property

     * @param propertyType the property's type

     * @return the field or null if there is no field for this property

     */

    public static Field findDeepField(Class<?> c, String property,

            Class<?> propertyType) {

        if (c == Object.class || c == null) {

            return null;

        }
        /* 
         来自 
        *N o w  J a v a  .   c o m*/


        Field result = null;

        // search visible and hidden fields in this class

        Field[] fields = c.getDeclaredFields();

        for (Field f : fields) {

            String fn = f.getName();

            if (fn.charAt(0) == '_') {

                // handle code style

                fn = fn.substring(1);

            }

            if (fn.equals(property)

                    && (propertyType == null || f.getType()

                        
展开阅读全文