首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java反射机制,求帮助!解决方法

2012-03-23 
java反射机制,求帮助!我有一个功能,页面比较复杂,有一个地方据说用java反射比较好,但是我没用过,所以请大

java反射机制,求帮助!
我有一个功能,页面比较复杂,有一个地方据说用java反射比较好,但是我没用过,所以请大家给我讲讲java反射是怎么一回事,另求java反射经典代码,求学习

[解决办法]
说起来他复杂了,lz可以看看这个http://apps.hi.baidu.com/share/detail/24992875,很不错的
[解决办法]
这个自认为很全了,不知意下如何?

Java code
import java.io.FileInputStream;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Properties;public class ReflectFactory{    private static final String FILENAME = "reflect.ini";    private Properties prop;    private Map<String, String> objTool = new HashMap<String, String>();    /**     * 初始化 读取配置文件     */    public void init()    {        prop = new Properties();        try        {            prop.load(new FileInputStream(FILENAME));            Enumeration<?> keys = prop.keys();            while (keys.hasMoreElements())            {                String key = (String) keys.nextElement();                String value = prop.getProperty(key);                objTool.put(key, value);            }        }catch (Exception e)        {            System.out.println("读配置文件异常");        }    }    /**     * 根据类名(完整包名)创建实例     * @param className     * @return 类的实例     */    private Object createObject(String className)    {        try        {            System.out.println(className);            Class<?> clazz = Class.forName(className);            return clazz.newInstance();        }catch (Exception e)        {            System.out.println("创建类的实例异常");        }        return null;    }    /**     * 根据 类名、方法名 调用相应的方法     * @param cName     * @param mtdName     * @param params     */    public void invokeMethod(String cName, String mtdName, Object[] params)    {        String className = objTool.get(cName);        Object target = createObject(className);        Class<?> targetClass = target.getClass();        int length = params.length;        Class<?>[] paramTypes = new Class<?>[length];        for (int i = 0; i < length; i++)        {            paramTypes[i] = params[i].getClass();        }        try        {            Method method = targetClass.getMethod(mtdName, paramTypes);            method.invoke(target, params);        }catch (Exception e)        {            System.out.println("执行异常");        }    }    /**     * 反射显示 类 的内容(属性、方法)     * @param cName 类名     */    public void showClass(String cName)    {        StringBuffer sbuf = new StringBuffer(1024);        String className = objTool.get(cName);        Object target = createObject(className);        Class<?> targetClass = target.getClass();        sbuf.append("类名:");        sbuf.append(className);        sbuf.append("\n\n");        sbuf.append(Modifier.toString(targetClass.getModifiers()));        sbuf.append(" class ");        sbuf.append(cName);        sbuf.append("\n{\n");        writeFiels(sbuf, targetClass);        writeConstructor(sbuf, targetClass);        writeMethods(sbuf, targetClass);        sbuf.append("}");        System.out.println(sbuf.toString());    }    /**     * 获取类的 方法 信息     * @param sbuf 存储信息容器     * @param targetClass 目标类     */    private void writeMethods(StringBuffer sbuf, Class<?> targetClass)    {        Method[] methods = targetClass.getDeclaredMethods();        for (Method m : methods)        {            sbuf.append("\t");            sbuf.append(Modifier.toString(m.getModifiers()));            sbuf.append(" ");            String returnType = m.getReturnType().getName();            sbuf.append(returnType.substring(returnType.lastIndexOf('.') + 1));            sbuf.append(" ");            sbuf.append(m.getName());            sbuf.append("(");            Class<?>[] paramTypes = m.getParameterTypes();            for (int i = 0; i < paramTypes.length; i++)            {                if (i > 0)                    sbuf.append(", ");                String paramName = paramTypes[i].getName();                sbuf                    .append(paramName.substring(paramName.lastIndexOf('.') + 1));            }            sbuf.append(");\n");        }    }    /**     * 获取类的 构造函数 信息     * @param sbuf 存储信息容器     * @param targetClass 目标类     */    private void writeConstructor(StringBuffer sbuf, Class<?> targetClass)    {        Constructor[] constructors = targetClass.getDeclaredConstructors();        for (Constructor c : constructors)        {            sbuf.append("\t");            sbuf.append(Modifier.toString(c.getModifiers()));            sbuf.append(" ");            String name = c.getName();            sbuf.append(name.substring(name.lastIndexOf('.') + 1));            sbuf.append("(");            Class<?>[] paramTypes = c.getParameterTypes();            for (int i = 0; i < paramTypes.length; i++)            {                if (i > 0)                    sbuf.append(", ");                sbuf.append(paramTypes[i]);            }            sbuf.append(");\n");        }        sbuf.append("\n");    }    /**     * 获取类的 属性 信息     * @param sbuf 存储信息容器     * @param targetClass 目标类     */    private void writeFiels(StringBuffer sbuf, Class<?> targetClass)    {        Field[] fields = targetClass.getDeclaredFields();        for (Field f : fields)        {            sbuf.append("\t");            sbuf.append(Modifier.toString(f.getModifiers()));            sbuf.append(" ");            String fieldType = f.getType().getName();            sbuf.append(fieldType.substring(fieldType.lastIndexOf('.') + 1));            sbuf.append(" ");            sbuf.append(f.getName());            sbuf.append(";\n");        }        sbuf.append("\n");    }    /**     * @param args     */    public static void main(String[] args)    {        ReflectFactory rf = new ReflectFactory();        rf.init();        Object[] params = {};        rf.invokeMethod("Person", "main", params);    }} 

热点排行