Mega Code Archive

 
Categories / Java / Reflection
 

Returns an instance of the given class name, by calling the default constructor

/*  * $Id: ClassUtil.java 709153 2008-10-30 12:54:10Z apetrelli $  *  * 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.  */ /**  * Utilities to work with dynamic class loading and instantiation.  *  * @version $Rev: 709153 $ $Date: 2008-10-30 13:54:10 +0100 (Thu, 30 Oct 2008) $  * @since 2.0.7  */ public class Main {   /**    * Returns an instance of the given class name, by calling the default    * constructor.    *    * @param className The class name to load and to instantiate.    * @param returnNull If <code>true</code>, if the class is not found it    * returns <code>true</code>, otherwise it throws a    * <code>TilesException</code>.    * @return The new instance of the class name.    * @throws CannotInstantiateObjectException If something goes wrong during instantiation.    * @since 2.0.7    */   public static Object instantiate(String className, boolean returnNull) {       ClassLoader original = Thread.currentThread().getContextClassLoader();       if (original == null) {           Thread.currentThread().setContextClassLoader(Main.class.getClassLoader());       }       try {           Class<?> namedClass = Class.forName(className);           return namedClass.newInstance();       } catch (ClassNotFoundException e) {           if (returnNull) {               return null;           }           throw new RuntimeException(                   "Unable to resolve factory class: '" + className + "'", e);       } catch (IllegalAccessException e) {           throw new RuntimeException(                   "Unable to access factory class: '" + className + "'", e);       } catch (InstantiationException e) {           throw new RuntimeException(                   "Unable to instantiate factory class: '"                           + className                           + "'. Make sure that this class has a default constructor",                   e);       } finally {           // If the original context classloader of the current thread was           // null, it must be reset.           if (original == null) {               Thread.currentThread().setContextClassLoader(null);           }       }   } }