集册 Java实例教程 获取从给定的类和参数类型指定的构造方法

获取从给定的类和参数类型指定的构造方法

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

461
获取从给定的类和参数类型指定的构造方法

/*

 * JBoss, Home of Professional Open Source

 * Copyright 2009, Red Hat Middleware LLC, and individual contributors

 * by the @authors tag. See the copyright.txt in the distribution for a

 * full listing of individual contributors.

 *

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

 */
 /**来自 
  N o w  J a v a  . c o m**/

//package com.nowjava;


import java.lang.reflect.Constructor;


import java.security.AccessController;


import java.security.PrivilegedActionException;

import java.security.PrivilegedExceptionAction;


public class Main {

    /**

     * Obtains the Constructor specified from the given Class and argument types

     * @param clazz

     * @param argumentTypes

     * @return

     * @throws NoSuchMethodException

     */
     /*
     NowJava.com 提 供
     */

    public static Constructor<?> getConstructor(final Class<?> clazz,

            final Class<?>... argumentTypes) throws NoSuchMethodException {

        try {

            return AccessController

                    .doPrivileged(new PrivilegedExceptionAction<Constructor<?>>() {

                        public Constructor<?> run()

                                throws NoSuchMethodException {

                            return clazz.getConstructor(argumentTypes);

                        }

                    });

        }

        // Unwrap

        catch (final PrivilegedActionException pae) {

            final Throwable t = pae.getCause();

            // Rethrow

            if (t instanceof NoSuchMethodException) {

                throw (NoSuchMethodException) t;

            } else {

                // No other checked Exception thrown by Class.getConstructor

                try {

                    
展开阅读全文