gpt4 book ai didi

java - 在Java中,有没有一种方法可以加载类实现不存在的接口(interface)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:37 25 4
gpt4 key购买 nike

我已经看到 Java 做了很多神奇的事情,但是有没有可能做到这一点:

在运行时,使用(例如)ClassLoader.defineClass,加载实现接口(interface)B 的类A。接口(interface) B 实际上并不存在于类路径中。 Java 将抛出异常 (ClassNotFoundException IIRC),并且不会加载该类。 A 类的所有其他部分都可以,而且我知道程序的任何其他部分都不会使用接口(interface) B。所以,我想做的是让解释器忽略缺少的接口(interface)定义并加载一个与 A 完全相同的类,只是它没有实现接口(interface)B

这可能吗?当然可以通过捕捉异常,手动编辑类A的二进制数据,然后重新加载来实现。或者通过手动构建 B.class 文件然后加载它,在运行时创建一个名为 B 的虚拟空接口(interface)。但这看起来有点乱,所以我的问题是,Java 是否提供任何方便的方法来做到这一点?

如果没有,我想,我会尝试实现这两种方法中的一种,但我仍然想听听意见。

我这样做是为了为两个不同的代码库提供一种方便的方式,以便在它们都被加载时相互交互,并且如果只有一个被加载则可以正常工作。

最佳答案

我不知道有任何与您描述的类似的解决方案。这一切都归结为自定义 ClassLoader。自定义 ClassLoaders 有点难以开始,如果它们具有像这样非常具体的语义,那么它们就会变得非常丑陋。

更不用说如果您的代码突然ClassLoader 中运行,您将遇到的问题类型。

我认为明智的解决方案是生成一个 mylibrary.jar 和一个 mylibrary-noB.jar(或者更明确: mylibrary-withB.jarmylibrary-noB.jar),让用户选择他们想要的。

关于java - 在Java中,有没有一种方法可以加载类实现不存在的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com