刚进一新公司,在看代码,里面全部用Class.forName().newInstance的方式也创建对象,不是很理解,这样有什么好处吗?只是运行时生成,少了编译的时间。 但我测试了创建1000个对象,和new相对并不快啊。求解,谢谢! 

解决方案 »

  1.   

    用在runtime时候根据传入的class对象创建对象,很多时候编译阶段无法确定将要实例化的对象的类型。ps:不是为了速度,反射一般比较慢
      

  2.   

    有时候 Class.forName().newInstance 有利于模块间减少耦合,  编码和编译阶段可以不依赖其它模块
      

  3.   

    这样可以动态加载与模块低耦合的类
    比如
    我原来课程设计时做的一个桌面应用
    我把皮肤的类包路径配在一个配置文件里 
    找到一个往lib里扔一个 只更新配置文件不改代码就行了
    然后我运行时从配置文件中读取皮肤类的类包路径
    然后用户就可以选择已有皮肤风格了
    选择的时候用反射生成实例即可
      

  4.   

    减少耦合性,正如 1 楼所说的,使用具体的实现不是在编译期决定的,而是在运行期决定的,那一般就采用这种方法了。说到性能问题,这样创建对象的速度比使用 new 的速度慢 1000 倍!
      

  5.   

    耦合性怎么就降低了,不是很明白
    比如在类A中需要用到类B的对象:使用 B b=new B(); 和 B b=(B)Class.forName("B");.....
      

  6.   


    假如我把具体的实现类写到配置文件中去。代码中这样用(假如 A 是接口,className 是从配置中读出来的类名):A a = (A)Class.forName(className).newInstance();这样的话,我以后可以通过配置文件修改,不用更改代码。
      

  7.   


    跟着果果学Java,哈哈~!