我只是测试动态类加载并且正在执行此操作:
package P1;
public class Class1
{
public static void main(String[] args)
{
Bird myBird = null;
String myClassName = "P2.Bird";
Class x = Class.forName(myClassName);
myBird = (Bird)x.newInstance();
}
}
Bird
是来自package P2
的课程,Class1
来自P1
。我应该在代码中添加什么才能使其工作,因为String myClassName...
行显示错误(未找到类)。我在Bird
中移动package P1
后尝试了相同的代码,即使这样也无法正常工作。
相关问题:为什么有人会使用动态类加载,它有什么优势吗?只使用" new"更简单(至少对我来说乍一看)。用于静态类加载的运算符,在这种情况下,我知道如何从不同的包中引用该类。非常感谢!
答案 0 :(得分:1)
您的Bird类提供了一个没有参数的默认公共构造函数吗?
动态类加载可能很有用,例如指定要在配置文件中使用的类(如果您使用log4j,或者允许将您自己的实现用于其中一个的其他库,您会遇到这种情况)接口)。在这种情况下,库不知道您将使用哪个类,并且您不必编写代码来初始化库(这将是动态类加载的替代方法,但这不太方便)
答案 1 :(得分:1)
对于第一个问题的答案,请尝试提及完整的包名称。我已经尝试了它并且它可以工作