集册 Java实例教程 为对象的成员查找适当的设置器。

为对象的成员查找适当的设置器。

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

475
为对象的成员查找适当的设置器。

/**

 * Copyright (c) 2003-2009, Xith3D Project Group all rights reserved.

 * 

 * Portions based on the Java3D interface, Copyright by Sun Microsystems.

 * Many thanks to the developers of Java3D and Sun Microsystems for their

 * innovation and design.

 * 

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions are met:

 * 

 * Redistributions of source code must retain the above copyright notice,

 * this list of conditions and the following disclaimer.

 * 

 * Redistributions in binary form must reproduce the above copyright notice,

 * this list of conditions and the following disclaimer in the documentation

 * and/or other materials provided with the distribution.

 * 

 * Neither the name of the 'Xith3D Project Group' nor the names of its

 * contributors may be used to endorse or promote products derived from this

 * software without specific prior written permission.

 * 

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE

 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR

 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A

 * RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

 * POSSIBILITY OF SUCH DAMAGE

 */

import java.lang.reflect.Method;

/** from 
时代Java公众号 - nowjava.com**/

public class Main{

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

        Object object = "nowjava.com";

        String member = "nowjava.com";

        System.out.println(getSetter(object,member));

    }

    /**

     * Finds the appropriate setter for the member of an object.

     * 

     * @param object The object

     * @param member Its member

     * @return The setter

     * @throws NoSetterException if no setter can be found

     */

    public static Method getSetter(Object object, String member)

            throws NoSetterException {


        StringBuffer buffer = new StringBuffer(member.length() + 4);

        buffer.append("set");

        buffer.append(member.substring(0, 1).toUpperCase());

        buffer.append(member.substring(1));
        /*
         from n o w  j a v a  . c o m 
        */

        String name = buffer.toString();


        Method met = null;


        try {

            // First try to get the most evident method, getMethod(memberType);

            Class<?> clazz = object.getClass().getDeclaredField(member)

                    .getType();

            // Try to find the method

            met = object.getClass().getMethod(name, new Class[] { clazz });

        } catch (Exception e) {

            // Didn't work ? Well, let's try another way..

            Method[] methods = object.getClass().getMethods();

            search: for (Method potentialMethod : methods) {

                // If right method and only one parameter, we found it !!

                
展开阅读全文