我的代码被用作两个大版本的一部分,并与外部接口(interface)交互。 在其中一个版本中添加了新的 API(我需要调用一个新方法)。
我想避免维护我的代码的两个版本,并使用 if 语句:
If VersionX
Do Method1()
If VersionY
Do Method2()
假设 method2()
是我需要调用的新函数,有没有一种方法可以让代码仅在运行时编译(意味着如果我在 VersionX
上运行系统,虽然method 2()
不存在,但不会有编译和异常的问题)?
最佳答案
您可以使用一个接口(interface)和两个类来实现:
interface API {
void Method();
}
class APIX implements API {
void Method() {
someInstance.Method1();
}
}
class APIY implements API {
void Method() {
anotherInstance.Method2();
}
}
然后根据当前版本,创建 APIX 或 APIY 的实例:
API api;
if (isVersionX)
api = new APIX();
else
api = new APIY();
api.Method();
此代码是针对包含这两种方法的较新 API 编译的。由于类加载只是按需加载,因此当只有旧 API 可用并且您在运行时没有任何冲突时,不会加载使用较新方法的类。
关于JAVA\仅在运行时编译一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166404/