【发布时间】:2012-06-23 01:50:54
【问题描述】:
我有一个项目需要在运行时动态创建类,其中唯一可用的信息是字符串形式的类名称。我现在正在使用一些简单的反射库方法进行测试,但我的问题是,如果我尝试“动态”加载的类位于同一目录中,为什么我必须提供完全限定的类名称?我使用的是linux,没有开发环境,只是我试图在同一个目录中调用的所有类,没有任何包声明。我必须设置一个包系统才能使用反射吗?这是这个小代码sn-p....
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不同,如果没有提供包名,它只是在同一个目录中查找。当我的所有类没有关联的包名称时,我不确定如何将此库与用户定义的类一起使用。
【问题讨论】:
-
你使用什么命令来运行
ReflectionTest?
标签: java class reflection dynamic