栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

URLClassLoader和包专用方法的可访问性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

URLClassLoader和包专用方法的可访问性

运行时的类由其完全限定名称和ClassLoader标识。

例如,当您测试两个

Class<T>
对象是否相等时,如果它们具有相同的规范名称,但是从不同的ClassLoader加载的,则它们将不相等。

对于两个属于同一个包的类(进而能够访问包私有方法),它们也需要从同一个ClassLoader加载,在这里不是这种情况。实际上

Test1
是由系统类加载器加载的,而公式是由inside中创建的URLClassLoader加载的
loadClass()

如果您为URLClassLoader指定一个父加载器以使其加载

Test1
,则仍然使用两个不同的加载器(您可以通过声明加载器是否相等来对其进行检查)。

我认为您无法使

Formula
该类由同一个
Test1
ClassLoader加载(您必须使用众所周知的路径并将其放在CLASSPATH上),但是我发现了一种相反的方法:加载
Test1
in的另一个实例用于加载公式的ClassLoader。这是伪代码中的布局:

class Test1 {  public static void main(String... args) {    loadClass(formula);  }  static void loadClass(location) {    ClassLoader loader = new ClassLoader();    Class formula = loader.load(location);    Class test1 = loader.load(Test1);    // ...    Method compute = test1.getMethod("compute");    compute.invoke(test1, formula);  }  static void compute(formula) {    print formula;  }}

这是pastebin。一些注意事项:

null
为避免上面列出的问题,我为URLClassLoader
指定了一个父级,并且我操纵了字符串以实现此目的-
但不知道这种方法在其他部署方案中的稳定性如何。另外,我使用的URLCLassLoader仅在两个目录中搜索以找到类定义,而不是在CLASSPATH中列出的所有条目



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号