集册 Java实例教程 检索给定属性的属性描述符对象。

检索给定属性的属性描述符对象。

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

529
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
检索给定属性的属性描述符对象。
//来自 N o w  J a v a  .   c o m

/*

 * The contents of this file are subject to the Sapient Public License

 * Version 1.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://carbon.sf.net/License.html.

 *

 * Software distributed under the License is distributed on an "AS IS" basis,

 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for

 * the specific language governing rights and limitations under the License.

 *

 * The Original Code is The Carbon Component Framework.

 *

 * The Initial Developer of the Original Code is Sapient Corporation

 *

 * Copyright (C) 2003 Sapient Corporation. All Rights Reserved.

 */

//package com.nowjava;

import java.beans.BeanInfo;

import java.beans.IntrospectionException;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;


public class Main {

    public static void main(String[] argv) throws Exception {

        String propertyName = "nowjava.com";

        Class beanClass = String.class;

        System.out.println(getPropertyDescriptor(propertyName, beanClass));

    }


    /**

     * Retrieves a property descriptor object for a given property.

     * <p>

     * Uses the classes in <code>java.beans</code> to get back

     * a descriptor for a property.  Read-only and write-only

     * properties will have a slower return time.

     * </p>

     *

     * @param propertyName The programmatic name of the property

     * @param beanClass The Class object for the target bean.

     *                  For example sun.beans.OurButton.class.

     * @return a PropertyDescriptor for a property that follows the

     *         standard Java naming conventions.

     * @throws PropertyNotFoundException indicates that the property

     *         could not be found on the bean class.

     *///N o w J a v a . c o m - 时  代  Java 提供

    private static final PropertyDescriptor getPropertyDescriptor(

            String propertyName, Class beanClass) {


        PropertyDescriptor resultPropertyDescriptor = null;


        char[] pNameArray = propertyName.toCharArray();

        pNameArray[0] = Character.toLowerCase(pNameArray[0]);

        propertyName = new String(pNameArray);


        try {

            resultPropertyDescriptor = new PropertyDescriptor(propertyName,

                    beanClass);

        } catch (IntrospectionException e1) {

            // Read-only and write-only properties will throw this

            // exception.  The properties must be looked up using

            // brute force.


            // This will get the list of all properties and iterate

            // through looking for one that matches the property

            // name passed into the method.

            try {

                BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);


                PropertyDescriptor[] propertyDescriptors = beanInfo

                        .getPropertyDescriptors();


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

                    if (propertyDescriptors[i].getName().equals(

                            propertyName)) {


                        // If the names match, this this describes the

                        // property being searched for.  Break out of

                        
展开阅读全文