View Javadoc

1   /**
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  package org.apache.hadoop.hbase.util;
20  
21  import java.lang.reflect.InvocationTargetException;
22  
23  import org.apache.hadoop.classification.InterfaceAudience;
24  
25  @InterfaceAudience.Private
26  public class ReflectionUtils {
27    @SuppressWarnings("unchecked")
28    public static <T> T instantiateWithCustomCtor(String className,
29      Class<? >[] ctorArgTypes, Object[] ctorArgs) {
30      try {
31        Class<? extends T> resultType = (Class<? extends T>) Class.forName(className);
32        return resultType.getDeclaredConstructor(ctorArgTypes).newInstance(ctorArgs);
33      } catch (ClassNotFoundException e) {
34        throw new UnsupportedOperationException(
35            "Unable to find " + className, e);
36      } catch (IllegalAccessException e) {
37        throw new UnsupportedOperationException(
38            "Unable to access specified class " + className, e);
39      } catch (InstantiationException e) {
40        throw new UnsupportedOperationException(
41            "Unable to instantiate specified class " + className, e);
42      } catch (InvocationTargetException e) {
43        throw new UnsupportedOperationException(
44            "Constructor threw an exception for " + className, e);
45      } catch (NoSuchMethodException e) {
46        throw new UnsupportedOperationException(
47            "Unable to find suitable constructor for class " + className, e);
48      }
49    }
50  }