为什么我们需要使用动态类加载?我们在第一次使用类时会加载类,所以如果我们不使用该类,它将永远不会被加载。 即使我们使用动态类加载:
A a =(A)Class.forName(“A”)。newInstance();
我们仍然需要在编译时了解A类。如果我们需要使用类A,我们可以使用构造函数创建它(它将被加载到内存中):
A a = new A();
如果我们不需要任何A类实例,那么包含A类构造函数调用的代码将永远不会被执行,因此它永远不会被加载到内存中
答案 0 :(得分:5)
您无需在编译时了解该课程 您可以从配置文件中读取类名,然后将其强制转换为接口,而无需对任何类名进行硬编码。
考虑
SomeInterface a = (SomeInterface)Class.forName(config.readSomething()).newInstance();
答案 1 :(得分:1)
我们仍然需要在编译时了解A类。
恩...
public interface Foo {..}
在一个单独的罐子里,
public class Bar implements Foo{..}
然后
Foo f = (Foo)Class.forName("Bar").newInstance();