JAVA \仅在运行时编译函数
我的代码被用作两个大版本的一部分并与外部接口交互。 在其中一个版本中添加了新的API(我需要调用一个新的方法)。JAVA 仅在运行时编译函数
我想阻止保持我的代码两个版本,并使用if语句:
If VersionX
Do Method1()
If VersionY
Do Method2()
假设method2()
是新的功能,我需要调用,是有办法的代码只能在编译运行时(意味着如果我在VersionX
系统上运行,那么编译和异常没有问题,尽管method 2()
在那里不存在)?
你可以用一个接口和两个类实现这一点:
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可用并且在运行时没有任何冲突时才会加载使用较新方法的类。
好主意,我会尝试一下,感谢解决方案! – Eyal 2011-05-29 08:19:16
如果存在,您可以使用反射来调用该方法。
// calls a method if it exists or throws an exception.
Method method = object.getClass().getMethod("DoMethod1");
method.invoke(object);
另一个好主意,我也会试试!谢谢! – Eyal 2011-05-29 08:19:35
您可以通过interfaceClass.class.getMethod(“xxx”,params)检查接口中是否存在该方法,并捕获该异常。或者,您可以调用方法并捕获LinkageError(NoSuchMethodError)(设置一个静态布尔值,不要再调用该方法,具体取决于值) – bestsss 2011-05-29 09:16:52