集册 Java实例教程 返回给定bean类和给定属性的属性描述符。

返回给定bean类和给定属性的属性描述符。

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

448
返回给定bean类和给定属性的属性描述符。

/*******************************************************************************

 * Copyright (C) 2011 Angelo Zerr <angelo.zerr@gmail.com>, Pascal Leclercq <pascal.leclercq@gmail.com>

 * All rights reserved. This program and the accompanying materials

 * are made available under the terms of the Eclipse Public License v1.0

 * which accompanies this distribution, and is available at

 * http://www.eclipse.org/legal/epl-v10.html

 *

 * Contributors:

 *     Angelo ZERR - initial API and implementation

 *     Pascal Leclercq - initial API and implementation

 *******************************************************************************/

//package com.nowjava;

import java.beans.BeanInfo;

import java.beans.IntrospectionException;/** from N o w  J a v a  .   c o m**/

import java.beans.Introspector;

import java.beans.PropertyDescriptor;


import java.util.ArrayList;

import java.util.List;


public class Main {



    /**

     * Returns the property descriptor of the given bean class and the given

     * property.

     * 

     * @param beanClass

     * @param propertyName

     * @return the PropertyDescriptor for the named property on the given bean

     *         class

     */

    private static PropertyDescriptor getPropertyDescriptor(//from nowjava - 时代Java

            Class beanClass, String propertyName) {

        if (!beanClass.isInterface()) {

            BeanInfo beanInfo;

            try {

                beanInfo = Introspector.getBeanInfo(beanClass);

            } catch (IntrospectionException e) {

                // cannot introspect, give up

                return null;

            }

            PropertyDescriptor[] propertyDescriptors = beanInfo

                    .getPropertyDescriptors();

            for (int i = 0; i < propertyDescriptors.length; i++) {

                PropertyDescriptor descriptor = propertyDescriptors[i];

                if (descriptor.getName().equals(propertyName)) {

                    return descriptor;

                }

            }

        } else {

            try {

                PropertyDescriptor propertyDescriptors[];

                List pds = new ArrayList();

                getInterfacePropertyDescriptors(pds, beanClass);

                if (pds.size() > 0) {

                    propertyDescriptors = (PropertyDescriptor[]) pds

                            .toArray(new PropertyDescriptor[pds.size()]);

                    PropertyDescriptor descriptor;

                    for (int i = 0; i < propertyDescriptors.length; i++) {

                        descriptor = propertyDescriptors[i];

                        if (descriptor.getName().equals(propertyName))

                            return descriptor;

                    }

                }

            } catch (IntrospectionException e) {

                // cannot introspect, give up

                return null;

            }

        }

        throw new IllegalArgumentException(

                "Could not find property with name " + propertyName + " in class " + beanClass); //$NON-NLS-1$ //$NON-NLS-2$

    }


    /**

     * Goes recursively into the interface and gets all defined

     * propertyDescriptors

     * 

     * @param propertyDescriptors

     *            The result list of all PropertyDescriptors the given interface

     *            defines (hierarchical)

     * @param iface

     *            The interface to fetch the PropertyDescriptors

     * @throws IntrospectionException

     */

    private static 
展开阅读全文