dev*_*ium 1 java reflection classpath classloader
在阅读了关于动态类加载(即从磁盘加载.class文件)之后,我有点担心.
假设我有一个MyClass.class包含该类的文件a.b.c.MyClass.假设我现在决定将文件移动到C:\(我在Windows中的根文件夹),我想动态加载这个类.这有可能吗?根据我的理解,似乎MyClass"路径总是必须是形式的*a/b/c.MyClass.
因此,以下代码似乎不起作用:
URL[] urls = new URL[] { new File("C:\\").toURL() };
URLClassLoader classLoader = new URLClassLoader(urls);
Class<?> targetClass = classLoader.loadClass("a.b.c.MyClass");
Run Code Online (Sandbox Code Playgroud)
强迫我们将.class文件放在反映其完整内部名称的目录结构中是疯狂的,IMO.我错过了什么吗?
这个事实的一个可能的暗示是,如果我决定将几个.class文件复制到一个临时目录中,这样我就可以对它们执行一些非常棒的操作,我将不得不在同一个临时目录中复制它们的所有脏路径,这是尴尬,充其量.
磁盘上的.class文件是否必须遵循与Java中的限定名称相同的目录结构才能运行它?
是的,如果您使用的是标准类加载器.
理论上,您可以实现一个自定义类加载器,该类加载器使用不同的方案来定位类文件.但是,在(例如)调试代码时,很可能会遇到问题.所以我不推荐它.
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |