2

我需要在两个不同的平台 SDK 上使用相同的类。

尽管类及其方法相同,但访问该类的路径不同。在我需要使用的一台设备上:

导入 a1.a2.classname

而对于我需要使用的第二个设备:

导入 b1.b2.b3.classname

请不要问我为什么:我没有编写 SDK,也无法更改它们。

所以问题是:你会怎么做?有没有办法在不同的 sdk 版本上导入同一类的不同版本?

在 C++ 中,我会使用预编译器开关,例如:

#ifdef SDK1
#include "path1/class.h"
#else
#include "path2/class.h"
#endif

你会如何在java中做到这一点?

请考虑我不能从类派生,因为我只能访问它的接口并且方法的数量太大而无法考虑使用代理

4

1 回答 1

2

您可以编写一个轻型代理层并检查哪些类可用于Class.forName(). 如果您的两个班级将来在签名等方面存在分歧,这就是要走的路。

但是,如果您完全确定它们将始终保留相同的功能,那么只需在您的构建工具中搜索并替换所有有问题的导入实例。在 Maven 中你可以使用资源过滤,这个问题有一个例子。

于 2011-11-18T13:52:56.553 回答