集册 Java实例教程 返回给定方法签名的构造函数;如果找不到此类构造函数,则返回null。

返回给定方法签名的构造函数;如果找不到此类构造函数,则返回null。

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

596
返回给定方法签名的构造函数;如果找不到此类构造函数,则返回null。
/*

 * Licensed to the Apache Software Foundation (ASF) under one or more

 * contributor license agreements.  See the NOTICE file distributed with

 * this work for additional information regarding copyright ownership.

 * The ASF licenses this file to You 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.lang.reflect.Constructor;

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

public class Main {

    /**

     * Returns a {@link Constructor} for the given method signature, or <tt>null</tt>

     * if no such <tt>Constructor</tt> can be found.

     *

     * @param type     the (non-<tt>null</tt>) type of {@link Object} the returned {@link Constructor} should create

     * @param argTypes a non-<tt>null</tt> array of types describing the parameters to the {@link Constructor}.

     * @return a {@link Constructor} for the given method signature, or <tt>null</tt>

     *         if no such <tt>Constructor</tt> can be found.

     * @see #invokeConstructor

     */

    public static Constructor getConstructor(Class type, Class[] argTypes) {

        if (null == type || null == argTypes) {

            throw new NullPointerException();

        }

        Constructor ctor = null;

        try {

            ctor = type.getConstructor(argTypes);

        } catch (Exception e) {
        /** from 
        N o w  J a v a  .   c o m**/

            ctor = null;

        }

        if (null == ctor) {

            // no directly declared matching constructor,

            // look for something that will work

            // XXX this should really be more careful to

            //     adhere to the jls mechanism for late binding

            Constructor[] ctors = type.getConstructors();

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

                Class[] paramtypes = ctors[i].getParameterTypes();

                if (paramtypes.length == argTypes.length) {

                    boolean canuse = true;

                    for (int j = 0; j < paramtypes.length; j++) {

                        if (paramtypes[j].
展开阅读全文