各位大侠说说反射来创建一个类的实例的好处是什么
为什么要用反射来创建一个类的实例

解决方案 »

  1.   

    我只知道一种情况:对象是从文件流或网络流中得到的被序列化了的对象,这时你不知道对象的类是什么(只知道它是一个Object),这时要创建与该对象同类型的对象时,必须反射。
      

  2.   

    一、反射来创建一个类的实例程序中不用new创建实例,
    二、根据一编译期就不会确定对象的类型, 这样就实现了动态的绑定,
    三、根据二增强了程序的扩展,如Class.forName("driver"),driver是通过配置文件配置的,当你要连接不同的数据库时,也许你就只要改一下配置文件就可以了,不用改动程序。对扩展开发,对修改关闭,著名的OPC原则。    
      

  3.   

    一个非常简单的道理:
    <action name="*SaveAction" class="{1}Action" method="save">
    <result name="success">{1}ListAction.do</result>
    <result name="json">/_template/struts-ext.jsp</result>
    <result name="input">/sms/{1}Inp.jsp</result>
    </action>
    我相信你能看的懂上面的代码。
    1.如果没有反射的话,spring如何根据配置文件生成你要的实例?
    2.如果没有反射的话,struts如何根据你的配置文件找到方法,并运行它?
    3.如果没有反射的话,你怎么能获得如此灵活的功能?
      

  4.   

    http://topic.csdn.net/u/20091226/15/a95ab465-9791-43cc-85b1-77a702951c74.html
      

  5.   

    spring上大名鼎鼎的注射机制就是反射的最后例子
      

  6.   

    用反射来创建一个类的实例,不是因为有什么好处,是因为需要比如:
    设计时不能确定 对象类型信息,运行时,通过配置文件或其他途径可以获取到 对象类型信息的时候。至于SpingFramework, 简单的说利用反射和动态代理(jdk1.3以后),通过配置文件,构建了一个Bean工厂。※反射不但可以根据 ClassName创建对象,还可以帮你分析 类结构。
      

  7.   

    不需要一个大switch-case用来根据类型生成对象.不需要注册机制的维护.
      

  8.   

    从Class theClass = ...来创 建一个实例theClass.newInstance() 或 theClass.getContructor(...).newInstance(....);的好处,就是theClass 是一个变量.当你编写程序时还未能确定, 在运行时要创建什么类的实例, 使用反射,是必须的-------------------而 new XXXX(...)  这是硬编码了的, 定下来后,运行时就变不了啦.例如有一个方法:
    /**
     * 根据传入的类名创建实例
     */
    public static Object createObject(String className) throws Exception {
        return Class.forName(className).newInstance();
    }这样子,在编码时,你预料不到运行时将会传入什么样的类名.
    你就得使用反射了.你总不能够public static Object createObject(String className) throws Exception {
        if ("java.util.Date".equals(className)) {
            return new java.util.Date();
        } else if ("java.lang.Integer".equals(className)) {
            return new java.lang.Integer();
        } else if ("java.lang.Double".equals(className)) {
            return new java.lang.Double();
        } else if ("java.util.ArrayList".equals(className)) {
            return new java.util.ArrayList();
        } else if ( "..." .equals(className)) {
            return new ...();
        }
        return null;
    }这样子,你能写多少个 if ... else if ... 啊
    能列举得完么???
      

  9.   


    SSH 哪个不用到反射的反射是java的灵魂还有一些设计模式会用到