【发布时间】:2011-09-12 08:45:20
【问题描述】:
我已经看到 Java 做了很多魔术,但有可能做到这一点:
在运行时,使用(例如)ClassLoader.defineClass,加载实现接口B 的类A。接口B 实际上并不存在于类路径中。 Java 将抛出异常(ClassNotFoundExceptionIIRC)并且不会加载该类。 A 类的所有其他部分都可以,而且我知道程序的其他部分不会使用接口B。所以,我想做的是让解释器忽略缺少的接口定义,并加载一个与A完全相同的类,除了它没有实现接口B。
这可能吗?当然可以通过捕获异常并手动编辑类A的二进制数据,然后再次加载来实现。或者通过手动构造 B.class 文件然后加载它,在运行时创建一个名为 B 的虚拟空接口。但这似乎有点乱,所以我的问题是,Java 是否提供了任何方便的方法来做到这一点?
如果没有,我想,我会尝试实现这两种方法中的一种,但我仍然想听听意见。
我这样做是为了为两个不同的代码库提供一种方便的方式,以便在它们都被加载的情况下相互交互,并且如果只有一个代码库能够正常工作。
【问题讨论】:
-
你正在尝试做一个混乱的工作,所以所有的解决方案都会很混乱。我认为这种特殊方法没有办法解决“混乱”。
-
那些必须是邪恶的代码库,如果你必须在那个级别进行调整以使它们交互/独立工作......
-
...先加载界面怎么样?只是一个想法......
标签: java interface classloader .class-file