我有两套Java API执行相同的工作但是针对不同的系统平台,所有的API函数定义完全相同,只是它们具有不同的包名称(并且它们执行没有实现相同的接口)。我没有足够的自由来改变API的代码,所以我无法让它们实现任何接口。
我想在这些API之上编写代码,并希望这些代码可用于两个API集(类似于策略设计模式)。
实现这一目标的最佳方法是什么?我不想创建接口和适配器类,因为有超过20种API方法。
答案 0 :(得分:5)
尽管不是原始问题想要的,但我会选择两个API的适配器。您的适配器将实现您自己的界面,然后可以在策略中使用。
这也使您可以选择为自己需要的操作提供自己的界面和描述性名称,并完全抽象出底层API。也许你不需要所有20种方法?
提示:
另一种方法是使用java.lang.reflect.Proxy
(如Beryllium所述)。代理的实现很简单,但您需要手动创建接口。
答案 1 :(得分:2)
您可以使用动态代理(java.lang.reflect.InvocationHandler),但这也需要其他类/接口。在这种情况下,动态代理只会以反射为代价,将您必须实现/委托的方法数量从20减少到1。
Keppil已经评论说,没有办法在标准Java中“免费”获得这个,因为标准的Java方法是使用一个接口(你正在寻找Groovy的鸭子打字)。