集册 Java实例教程 获取属性描述符

获取属性描述符

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

489
获取属性描述符
/* 来自 时 代 J a v a*/

/*

 * Copyright 2000-2014 Vaadin Ltd.

 * 

 * Licensed under the Apache License, Version 2.0 (the "License"); you may not

 * use this file except in compliance with the License. You may obtain a copy of

 * the License at

 * 

 * http://www.apache.org/licenses/LICENSE-2.0

 * 

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

 * License for the specific language governing permissions and limitations under

 * the License.

 */

//package com.nowjava;

import java.beans.BeanInfo;

import java.beans.IntrospectionException;


import java.beans.PropertyDescriptor;


import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.List;


public class Main {

    private static List<PropertyDescriptor> getPropertyDescriptors(

            BeanInfo beanInfo) {

        PropertyDescriptor[] descriptors = beanInfo

                .getPropertyDescriptors();

        List<PropertyDescriptor> result = new ArrayList<PropertyDescriptor>(

                descriptors.length);

        for (PropertyDescriptor descriptor : descriptors) {

            try {

                Method readMethod = getMethodFromBridge(descriptor//时代Java公众号 提供

                        .getReadMethod());

                if (readMethod != null) {

                    Method writeMethod = getMethodFromBridge(

                            descriptor.getWriteMethod(),

                            readMethod.getReturnType());

                    if (writeMethod == null) {

                        writeMethod = descriptor.getWriteMethod();

                    }

                    PropertyDescriptor descr = new PropertyDescriptor(

                            descriptor.getName(), readMethod, writeMethod);

                    result.add(descr);

                } else {

                    result.add(descriptor);

                }

            } catch (SecurityException ignore) {

                // handle next descriptor

            } catch (IntrospectionException e) {

                result.add(descriptor);

            }

        }

        return result;

    }


    /**

     * Return declared method for which {@code bridgeMethod} is generated. If

     * {@code bridgeMethod} is not a bridge method then return null.

     */

    private static Method getMethodFromBridge(Method bridgeMethod)

            throws SecurityException {

        if (bridgeMethod == null) {

            return null;

        }

        return getMethodFromBridge(bridgeMethod,

                bridgeMethod.getParameterTypes());

    }


    /**

     * Return declared method for which {@code bridgeMethod} is generated using

     * its {@code paramTypes}. If {@code bridgeMethod} is not a bridge method

     * then return null.

     */

    
展开阅读全文