集册 Java实例教程 返回给定bean属性的数据类型(类)

返回给定bean属性的数据类型(类)

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

548
返回给定bean属性的数据类型(类)

/*

 *  Copyright 2010 Visural.

 * 

 *  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.

 *  under the License.

 */
 /*来自 
  时代Java公众号 - N o w J a  v a . c o m*/

//package com.nowjava;

import java.lang.reflect.Method;


public class Main {

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

        Object bean = "nowjava.com";

        String property = "nowjava.com";

        System.out.println(getPropertyType(bean, property));

    }


    /**

     * Return the data type (class) of the given bean property

     * @param bean

     * @param property

     * @return

     */

    public static Class getPropertyType(Object bean, String property) {

        if (bean == null) {

            throw new IllegalArgumentException(

                    "null bean passed for introspection.");

        }

        return getPropertyType(bean.getClass(), property);//来 自 nowjava

    }


    /**

     * Return the data type (class) of the given bean property

     * @param bean

     * @param property

     * @return

     */

    public static Class getPropertyType(Class type, String property) {

        Method getter = findGetter(type, property);

        if (getter != null) {

            return getter.getReturnType();

        } else {

            Method setter = findSetter(type, property);

            if (setter != null) {

                return setter.getParameterTypes()[0];

            } else {

                throw new IllegalArgumentException("Bean of type "

                        + type.getName() + " does not have a property '"

                        + property + "'");

            }

        }

    }


    /**

     * Attempt to find a getter method for the given bean property. Returns

     * null if the property can not be resolved.

     * @param beanType

     * @param propertyName

     * @return

     */

    public static Method findGetter(Class beanType, String propertyName) {

        String getterName = "get"

                + propertyName.toUpperCase().substring(0, 1)

                + propertyName.substring(1);

        Method result = findMethod(beanType, getterName);

        if (result == null) {

            getterName = "is" + propertyName.toUpperCase().substring(0, 1)

                    + propertyName.substring(1);

            result = findMethod(beanType, getterName);

        }

        return result;

    }


    /**

     * Attempt to find a setter method for the given bean property. Returns

     * null if the property can not be resolved.

     * @param beanType

     * @param propertyName

     * @return

     */

    public static Method findSetter(Class beanType, String propertyName) {

        try {

            String setterName = "set"

                    + propertyName.toUpperCase().substring(0, 1)

                    + propertyName.substring(1);

            for (Method m : beanType.getMethods()) {

                if (m.getName().equals(setterName)

                        && m.getParameterTypes().length == 1) {

                    return m;

                }

            }

            return null;

        } catch (SecurityException ex) {

            throw 
展开阅读全文