【问题标题】:Dynamic class loading动态类加载
【发布时间】:2011-08-03 03:51:25
【问题描述】:

为什么我们需要使用动态类加载?类是在我们第一次使用时加载的,所以如果我们不使用类,它永远不会被加载。 即使我们使用动态类加载:

A a = (A)Class.forName("A").newInstance();

我们仍然需要在编译时了解 A 类。如果我们需要使用 A 类,我们可以简单地使用构造函数创建它(它会被加载到内存中):

A a = new A();

如果我们不需要 A 类的任何实例,那么包含 A 类构造函数调用的代码将永远不会被执行,因此它永远不会被加载到内存中

【问题讨论】:

    标签: java


    【解决方案1】:

    您无需在编译时了解该类。
    您可以从配置文件中读取类名,然后将其转换为接口,而无需对任何类名进行硬编码。

    考虑

    SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance();
    

    【讨论】:

      【解决方案2】:

      我们仍然需要在编译时了解 A 类。

      咳咳……

      public interface Foo {..}
      

      在一个单独的罐子里,

      public class Bar implements Foo{..}
      

      然后

      Foo f = (Foo)Class.forName("Bar").newInstance();
      

      【讨论】:

        猜你喜欢
        • 2011-04-04
        • 2014-09-27
        • 2021-02-08
        • 2012-10-10
        • 2013-05-05
        • 2016-08-02
        • 2012-08-07
        • 1970-01-01
        • 2012-08-11
        相关资源
        最近更新 更多