(Copy Code)

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 反射
 * 
 * @author JiaLong Li
 * @param <T> 此类所维护的类型
 */
public class ReflectionDemo<T>
{

    /**
     * 得到某个类对象的公共属性
     * 
     * @param owner 某个对象
     * @param fieldName 字段名
     * @return 该字段的值
     * @throws Exception
     */
    public Object getProperty (T owner , String fieldName) throws Exception
    {
        Class<?> ownerClass = owner.getClass();
        Field field = ownerClass.getField(fieldName);
        return field.get(field);
    }

    /**
     * 返回某个类的静态公共属性的值
     * 
     * @param className 类名
     * @param fieldName 属性名
     * @return 属性值
     * @throws Exception
     */
    public Object getStaticProperty (String className , String fieldName) throws Exception
    {
        Class<?> ownerClass = Class.forName(className);
        Field field = ownerClass.getField(fieldName);
        return field.get(ownerClass);
    }

    /**
     * 执行某个类对象的方法
     * 
     * @param owner 类对象
     * @param methodName 方法名
     * @param args 方法参数(如果没有,则为null)
     * @return 方法返回值(如果有)
     * @throws Exception
     */
    public Object invokeMethod (T owner , String methodName , Object [] args) throws Exception
    {
        Class<?> ownerClass = owner.getClass();
        Class<?> [] argsClass = new Class [args.length];
        for (int i = 0 ; i < argsClass.length ; i++)
        {
            argsClass[i] = args[i].getClass();
        }
        Method method = ownerClass.getMethod(methodName , argsClass);
        return method.invoke(owner , args);
    }

    /**
     * 执行某个类的静态方法
     * 
     * @param className 类名
     * @param MethodName 方法名
     * @param args
     * @return 方法返回值
     * @throws Exception
     */
    public Object invokeStaticMethod (String className , String MethodName , Object [] args) throws Exception
    {
        Class<?> ownerClass = Class.forName(className);
        Class<?> [] argsClass = new Class [args.length];
        for (int i = 0 ; i < argsClass.length ; i++)
        {
            argsClass[i] = args[i].getClass();
        }
        Method method = ownerClass.getMethod(MethodName , argsClass);
        return method.invoke(null , args);
    }

    /**
     * 新建某个类的实例
     * 
     * @param className 类名
     * @param args 类的构造函数的参数(如果么有,则为null)
     * @return 返回类的实例
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public T newInstance (String className , Object [] args) throws Exception
    {
        Class<?> newClass = Class.forName(className);
        Class<?> [] argsClass = new Class [args.length];
        for (int i = 0 ; i < argsClass.length ; i++)
        {
            argsClass[i] = args[i].getClass();
        }
        Constructor cons = newClass.getConstructor(argsClass);
        return (T) cons.newInstance(args);
    }

    /**
     * 检查某个对象是不是指定类的实例
     * 
     * @param obj 要检查的对象
     * @param cls 指定类
     * @return 如果 obj 是此类的实例,则返回 true
     */
    public boolean isInstance (T obj , Class<> cls)
    {
        return cls.isInstance(obj);
    }

}

相关文章:

  • 2021-07-09
  • 2021-09-25
  • 2021-07-25
  • 2021-10-09
  • 2021-11-25
  • 2022-12-23
猜你喜欢
  • 2020-02-24
  • 2021-05-31
  • 2022-01-12
  • 2021-01-08
  • 2022-01-18
  • 2021-07-11
  • 2022-01-18
相关资源
相似解决方案