Mega Code Archive

 
Categories / Java / Reflection
 

Create new instance and invoke methods

/**  * 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.  **/ //package com.utils; import java.lang.reflect.*; //import org.apache.log4j.*; /**  * Utilities to work with reflection.  *  * @author Erich Roncarolo  * @version 0.1 - 2004-09-07  */ public class ClassUtil {     private ClassUtil() {     }//ClassUtil()     /**      * Returns a new instance of an object using constructor      * without arguments.      *      * @param name class name      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(String name) {         return newInstance(name, null, null, false);     }//newInstance()     /**      * Returns a new instance of an object using constructor      * with arguments' running classes as parameter types.      *      * @param name class name      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(String name, Object args[]) {         return newInstance(name, null, args, false);     }//newInstance()     /**      * Returns a new instance of an object using constructor with      * specified parameter types and arguments.      *      * @param name class name      * @param param constructor parameter types      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(String name, Class param[], Object args[]) {         return newInstance(name, param, args, false);     }//newInstance()     /**      * Returns a new instance of an object using constructor with      * specified parameter types and arguments.      *      * @param name class name      * @param param constructor parameter types      * @param args constructor initialization arguments      * @param logException constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(String name, Class param[], Object args[], boolean logException) {         if (param == null && args != null) {             param = new Class[args.length];             for (int i = 0; i < param.length; i++) {                 if (args[i] != null) {                     param[i] = args[i].getClass();                 } else {                     param[i] = null;                 }             }//for         }//if         Constructor c = null;         Object obj = null;         try {             c = Class.forName(name).getConstructor(param);             if (c != null) {                 obj = c.newInstance(args);             }         } catch (Exception x) {             if (logException) {              //   Logger log = Logger.getLogger(ClassUtil.class);              //   log.error("", x);             }             return null;         }         return obj;     }//newInstance()     /**      * Returns a new instance of an object using constructor      * without arguments.      *      * @param clazz object class      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(Class clazz) {         return newInstance(clazz, null, null);     }//newInstance()     /**      * Returns a new instance of an object using constructor      * with arguments' running classes as parameter types.      *      * @param clazz object class      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(Class clazz, Object args[]) {         return newInstance(clazz, null, args);     }//newInstance()     /**      * Returns a new instance of an object using constructor with      * specified parameter types and arguments.      *      * @param clazz object class      * @param param constructor parameter types      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object newInstance(Class clazz, Class param[], Object args[]) {         if (clazz == null) {             return null;         }         String name = clazz.getName();         return newInstance(name, param, args);     }//newInstance()     /**      * Invokes the object's method with specified parameter types and arguments.      *      * @param obj the object the specified method is invoked from (use a Class object if method is static)      * @param name method name      * @param param constructor parameter types      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object invokeMethod(Object obj, String name, Class param[], Object args[]) {         if (param == null && args != null) {             param = new Class[args.length];             for (int i = 0; i < param.length; i++) {                 if (args[i] != null) {                     param[i] = args[i].getClass();                 } else {                     param[i] = null;                 }             }//for         }//if         Method m = null;         Object ret = null;         try {             if (obj instanceof Class) {                 m = ((Class) obj).getMethod(name, param);             } else {                 m = obj.getClass().getMethod(name, param);             }             if (m != null) {                 ret = m.invoke(obj, args);             }         } catch (NoSuchMethodException x) {             // Logger log = Logger.getLogger(ClassUtil.class);             //log.warn("No method "+(obj instanceof Class ? (Class)obj : obj.getClass()).toString()+"."+name+"("+Arrays.asList(param)+") found - "+TnesException.firstStackTrace(x));             return null;         } catch (Exception x) {             //Logger log = Logger.getLogger(ClassUtil.class);            // log.error("", x);             return null;         }         return ret;     }//invokeMethod()     /**      * Invokes the object's method with specified arguments.      *      * @param obj the object the specified method is invoked from (use a Class object if method is static)      * @param name method name      * @param args constructor initialization arguments      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object invokeMethod(Object obj, String name, Object args[]) {         return invokeMethod(obj, name, null, args);     }//invokeMethod()     /**      * Invokes the object's method with no arguments.      *      * @param obj the object the specified method is invoked from (use a Class object if method is static)      * @param name method name      *      * @return a new object instance or null if some error occours (exceptions are logged)      */     public static Object invokeMethod(Object obj, String name) {         return invokeMethod(obj, name, null, null);     }//invokeMethod() }//ClassUtil