JAVA \ 仅在运行时编译函数
我的代码用作两个大版本的一部分并与外部接口交互。 在其中一个版本中添加了新的 API(我需要调用一个新方法)。
我想防止维护代码的两个版本,并使用 if 语句:
If VersionX
Do Method1()
If VersionY
Do Method2()
假设 method2()
是我需要调用的新函数,是否有一种方法可以使代码仅在运行时编译(意味着如果我在 VersionX
系统上运行,虽然 method 2()
不存在,但不会出现编译和异常问题)?
My code is used as part of two big versions and interact with external interface.
In one of the versions new API was added (I need to call a new method).
I would like to prevent maintaining two versions of my code, and use if statement:
If VersionX
Do Method1()
If VersionY
Do Method2()
assuming method2()
is the new function I need to call, is there a way that the code can compile only on runtime (means that if I run on VersionX
system, there would be no problem of compilation and exceptions though method 2()
does not exist there)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用一个接口和两个类来实现此目的:
然后根据当前版本,创建 APIX 或 APIY 的实例:
此代码针对较新的 API 进行编译其中包含这两种方法。由于类加载仅按需进行,因此当只有旧 API 可用且运行时不存在任何冲突时,不会加载使用较新方法的类。
You can achieve this with an interface and two classes:
Then depending on the current version, you create an instance of either APIX or APIY:
This code is compiled against the newer API wich contains both methods. Since class loading is on demand only, the class using the newer method is not loaded when only the old API is available and you don't have any conflicts at run-time.
如果该方法存在,您可以使用反射来调用该方法。
You can use reflection to call the method if it exists.