我有一个项目需要在运行时动态创建类,其中唯一可用的信息是字符串形式的类名称。我现在正在使用一些简单的反射库方法进行测试,但我的问题是,如果我试图“动态”加载的类位于同一目录中,为什么我必须提供完全限定的类名称?我使用的是linux,没有开发环境,只是我试图在同一个目录中调用的所有类,没有任何包声明。我必须设置一个包系统才能使用反射吗?这是这个小代码片段......
public class ReflectionTest {
public static void main(String[] args) {
try {
Class nodeClass = Class.forName("Node");
System.out.println(nodeClass.toString());
} catch (ClassNotFoundException cnfe) {
System.out.println("Error");
}
}
}
现在,这会引发错误。但是当我创建一个 Node 实例,然后使用 获得它的完全限定类名时Node.getClass().getName()
,我只会得到“Node”作为回报。所以我不明白为什么反射库与使用“java”调用 JVM 的工作方式不同,如果没有提供包名,它只会在同一个目录中查找。当我的类都没有关联的包名称时,我不确定如何将此库与用户定义的类一起使用。