Create new instance and invoke methods : Instance « Reflection « Java






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

   
    
    
    
    
    
    
    
  








Related examples in the same category